From 3294323a59fc92131dedfed02f4c6d0c1bf378cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=A4=A9=E5=A8=A5?= <3517601051@qq,com> Date: Sun, 19 May 2024 12:57:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240514-webapi\345\222\214rest.md" | 201 ++++++++++++++++++ .../20240516-\345\244\215\344\271\240.md" | 146 +++++++++++++ 2 files changed, 347 insertions(+) create mode 100644 "\345\224\220\345\244\251\345\250\245/20240514-webapi\345\222\214rest.md" create mode 100644 "\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" diff --git "a/\345\224\220\345\244\251\345\250\245/20240514-webapi\345\222\214rest.md" "b/\345\224\220\345\244\251\345\250\245/20240514-webapi\345\222\214rest.md" new file mode 100644 index 0000000..cf3f254 --- /dev/null +++ "b/\345\224\220\345\244\251\345\250\245/20240514-webapi\345\222\214rest.md" @@ -0,0 +1,201 @@ +## 什么是状态管理 +对于大项目来说,组件多,状态零散分布在许多组件和组件之间的交互操作中,这时候就需要状态管理,理论上来说,每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了 +示例如下: +```js + + + + + +``` +- 上面代码中,当add方法不断被调用时,count的值就会不断增加显示在页面上,这样叫做“状态自管理”,由以下几个部分组成: + +- 状态(state):驱动整个应用的数据源 +- 视图(view):对状态的一种声明式映射 +- 交互(actions):状态根据用户在视图中的输入而作出相应变更的可能方式 +- 但是以上只是一个单向数据流,即从view上出发action改变state,state的改变最终回到view上,然而,当我们有多个组件共享一个共同的状态时,就会出现以下问题: + +- 多个组件依赖于同一状态 +- 来自不同视图的交互也可能需要更改同一份状态 +## 二、使用Pinia实现状态管理 +```js +//1.安装 +npm install pinia +2.创建pinia实例 +// main.js +import {createPinia} from 'pinia'; +let app = createApp(App); +const pinia = createPinia(); +app.use(pinia); +3.pinia的基本用法 +1.创建store实例 +// stores/counter.js +import { defineStore } from 'pinia'; + +// Option对象写法 +export const useCountStore = defineStore('count',{ + state:()=>{ + return {count:0} + }, + // 也可以写为 + // state: () => ({ count: 0 }),这里用大括号是为了让他以对象的形式返回出来 + actions:{ + onClick(){ + this.count++ + } + } +}) + +// Setup函数写法 +export const useCountStore = defineStore('count',()=>{ + let count = ref(0); + function onClick(){ + count.value++; + }; + return{count,onClick} +}) +``` +- store的参数: + +- 第一个参数要求不可重复 +- 第二个参数可以接受两种类型的值:Setup函数或Option对象 +```js +Setup: +ref() 就是 state 属性,computed() 就是 getters,computed() 就是 getters +在 setup store 中返回 state 的所有属性 +Option:state 是 store 的数据 (data),getters 是 store 的计算属性 (computed),而 actions 则是方法 (methods) +2.在组件中使用store + + +``` +从store解构 为了从 store 中提取属性时保持其响应性,需要使用 storeToRefs(),但是可以直接从 store 中解构 action + +import {storeToRefs} from 'pinia'; +const counter = useCountStore(); +// 并且会跳过所有的 action 或非响应式 (不是 ref 或 reactive) 的属性 +const {count} = storeToRefs(counter); +// 作为 action 的 onClick 可以直接解构 +const {onClick} = counter +## 三、State +- 1.概念 +- state是 store 的核心,被定义为一个返回初始状态的函数 + +- 2.访问 +- const counter = useCountStore(); +// 访问的是state的初始状态 +// 也可以直接对其读写 +const data = counter.count; +- 3.重置 +- 通过调用 store 的 $reset() 方法将 state 重置为初始值 +```js +// counter.js +export const useCountStore = defineStore('count',()=>{ + let count = ref(0); + function onClick(){ + count.value++; + }; + // 创建自己的 $reset() 方法 + function $reset(){ + count.value=0; + } + return{count,onClick,$reset} +}) + + + + +``` +- 4.变更 +- 用 store.count++ 直接改变 store,还可以调用 $patch 方法 + +- 5.替换 +- 不能完全替换掉 store 的 state,因为那样会破坏其响应性,还是使用patch + +- 四、Getter +- Getter 完全等同于 store 的 state 的计算属性 +```js +export const useCountStore = defineStore('count',{ + state:()=>{ + return {count:1} + }, + actions:{ + onClick(){ + this.count++ + } + }, + getters: { + doubleCount: (state) => state.count * 2, + }, +}) +``` + +- 大多数时候,getter 仅依赖 state,不过,有时它们也可能会使用其他 getter,通过 this,你可以访问到其他任何 getter +- getter 只是幕后的计算属性,所以不可以向它们传递任何参数。不过,你可以从 getter 返回一个函数,该函数可以接受任意参数 +```js +export const useUsersStore = defineStore('users', { + getters: { + getUserById: (state) => { + // 可以返回函数,这个返回的函数可以接受容易参数 + return (userId) => state.users.find((user) => user.id === userId) + }, + }, +}) +``` + // 调用 +五、Action +Action 相当于组件中的方法,也可通过 this 访问整个 store 实例,而且是可以异步的 +## Api +Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 + +## rest +HTTP总共包含八种方法: + +GET +POST +PUT +DELETE +OPTIONS +HEAD +TRACE +CONNECT +● 2xx = Success(成功) + +● 3xx = Redirect(重定向) + +● 4xx = User error(客户端错误) + +● 5xx = Server error(服务器端错误) + +我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" "b/\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" new file mode 100644 index 0000000..8ab6db9 --- /dev/null +++ "b/\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" @@ -0,0 +1,146 @@ +## 复习代码 +```js + + + + + +``` \ No newline at end of file -- Gitee From abf753f1ac1440e34a1e266794d7c854e5294227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=A4=A9=E5=A8=A5?= <3517601051@qq,com> Date: Mon, 20 May 2024 17:35:59 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240516-\345\244\215\344\271\240.md" | 146 ------------------ .../20240520-rest.md" | 34 ++++ 2 files changed, 34 insertions(+), 146 deletions(-) delete mode 100644 "\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" create mode 100644 "\345\224\220\345\244\251\345\250\245/20240520-rest.md" diff --git "a/\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" "b/\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" deleted file mode 100644 index 8ab6db9..0000000 --- "a/\345\224\220\345\244\251\345\250\245/20240516-\345\244\215\344\271\240.md" +++ /dev/null @@ -1,146 +0,0 @@ -## 复习代码 -```js - - - - - -``` \ No newline at end of file diff --git "a/\345\224\220\345\244\251\345\250\245/20240520-rest.md" "b/\345\224\220\345\244\251\345\250\245/20240520-rest.md" new file mode 100644 index 0000000..1f77f5f --- /dev/null +++ "b/\345\224\220\345\244\251\345\250\245/20240520-rest.md" @@ -0,0 +1,34 @@ +## rest +- rest是一种组织web服务的架构 +```js +//请求用户集合 +get /users + +//获取指定“用户” +get /users/99 + +//新增 数据通过请求的主体body传递 +post /users + +//修改 +put /users/88 + +//删除 一般具体到数据库中的话,使用软件删除,叫做伪删除 +delete /users/66 +``` +### 一句话描述REST实质: +- URL中只使用名词来定位资源,用HTTP协议里的动词(GET、POST、PUT、DELETE)来实现资源的增删改查操作。 + +- 早期不能跨平台的版本 + - .NET Frameword 4.8 + +- 现在可以跨平台的版本 + - .NET Core 跨平台的应用框架 LST长期支持版本 8.0 + - .NET Core跨平台的应用框架 + - APS.NET Core 跨平台的web应用框架 + +## ide +### 概念: +- 集成开发环境,用于提供程序开发环境的应用程序 +- 也可以称作编译器,basic是第一个有ide的编程语言 + -- Gitee From 881d2adaec679e0d1be0a6426cfb202059b42647 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 21 May 2024 11:37:02 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...10\345\222\214\351\241\271\347\233\256.md" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" diff --git "a/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" "b/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" new file mode 100644 index 0000000..9bc2276 --- /dev/null +++ "b/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" @@ -0,0 +1,34 @@ +## 解决方案和项目之间的联系 +- 1. 编译或者打包解决方案的时候,会同时编译或者打包旗下所有项目 +- 2. 如果运行解决方案的话,则会按照编排的(指定的启动项目),分别调用指定项目 +```js +dotnet new webapi -n Admin2024.Api +dotnet new webapi -n Admin2024.Domain +//生成.net项目 +dotnet build +//链接项目 +dotnet add ./Admin2024.Api reference ./AdmiN2024.Domain +//还原项目 +dotnet restore +//解决方案 +dotnet new sln +``` +//插入数据 +```js +app.mapGet("/api/users",()=>{ + var list=new list (); + list.Add(new dynamic{ + usersname="admin", + password="9900" + }) + return list +}) + +app.Run(); + +//中间件 +app.use(async(ctx.next)=>{ + var forecast=Enumerable.Range(1,10) + ctx.Response.Write(foreccst) +}) +``` \ No newline at end of file -- Gitee From 972d7cca24c9e263c346143678dc7d1d08d28912 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 24 May 2024 11:40:56 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...10\345\222\214\351\241\271\347\233\256.md" | 3 +- ...0240523-webapi\351\241\271\347\233\256.md" | 20 +++++++ .../20245024-webapi\346\226\260demo.md" | 59 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 "\345\224\220\345\244\251\345\250\245/20240523-webapi\351\241\271\347\233\256.md" create mode 100644 "\345\224\220\345\244\251\345\250\245/20245024-webapi\346\226\260demo.md" diff --git "a/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" "b/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" index 9bc2276..0c00258 100644 --- "a/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" +++ "b/\345\224\220\345\244\251\345\250\245/20240521-\350\247\243\345\206\263\346\226\271\346\241\210\345\222\214\351\241\271\347\233\256.md" @@ -13,8 +13,9 @@ dotnet restore //解决方案 dotnet new sln ``` -//插入数据 + ```js +// 插入数据 app.mapGet("/api/users",()=>{ var list=new list (); list.Add(new dynamic{ diff --git "a/\345\224\220\345\244\251\345\250\245/20240523-webapi\351\241\271\347\233\256.md" "b/\345\224\220\345\244\251\345\250\245/20240523-webapi\351\241\271\347\233\256.md" new file mode 100644 index 0000000..cd68144 --- /dev/null +++ "b/\345\224\220\345\244\251\345\250\245/20240523-webapi\351\241\271\347\233\256.md" @@ -0,0 +1,20 @@ +## program.cs +```js +namespace Admin2024.Api; + +public static class Program +{ + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateWebHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(builder=>{ + builder.UseStartup(); + }); + } +} +``` + diff --git "a/\345\224\220\345\244\251\345\250\245/20245024-webapi\346\226\260demo.md" "b/\345\224\220\345\244\251\345\250\245/20245024-webapi\346\226\260demo.md" new file mode 100644 index 0000000..4aed635 --- /dev/null +++ "b/\345\224\220\345\244\251\345\250\245/20245024-webapi\346\226\260demo.md" @@ -0,0 +1,59 @@ +## program.cs +```js +namespace Admin2024.Api; + +public static class Program +{ + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateWebHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(builder=>{ + builder.UseStartup(); + }); + } +} +``` +## Startup.cs +```js + +namespace Admin2024.Api; + +public class Startup +{ + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); + app.UseEndpoints(enPoints=>{ + enPoints.MapControllers(); + }); + } + + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + } + +} + +``` + +## BlogsControllers.cs +```js +using Microsoft.AspNetCore.Mvc; + +namespace Admin2024.Api; + +[Route("[controller]")] +public class BlogsController : ControllerBase +{ + public IActionResult Index() + { + return Ok("呵呵哈哈哈或"); + } +} + +``` -- Gitee