From a4cdcd099acfc9774dd80bd69feadd780f0ad893 Mon Sep 17 00:00:00 2001
From: zknu2015 <2536963991@qq.com>
Date: Fri, 25 Sep 2020 22:37:15 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=9A=E5=AE=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../_posts/React\344\273\213\347\273\215.md" | 20 ++
...ct\350\204\232\346\211\213\346\236\266.md" | 22 ++
...nt\347\273\204\344\273\266\345\272\223.md" | 78 +++++++
source/_posts/cookie.md | 21 ++
...eate-react-app\347\273\223\346\236\204.md" | 80 ++++++++
...s6\346\250\241\345\235\227\345\214\226.md" | 26 +++
.../expree \346\241\206\346\236\266.md" | 26 +++
...56\347\224\237\346\210\220\345\231\250.md" | 31 +++
.../_posts/git\344\275\277\347\224\250.md" | 50 +++++
...50\345\256\214\346\225\264\347\211\210.md" | 184 +++++++++++++++++
.../session\346\212\200\346\234\257.md" | 9 +
...li\350\204\232\346\211\213\346\236\266.md" | 103 ++++++++++
.../vue-router\346\246\202\345\277\265.md" | 27 +++
source/_posts/vuex.md | 46 +++++
.../webpack\344\275\277\347\224\250.md" | 190 ++++++++++++++++++
.../websocket\344\275\277\347\224\250.md" | 11 +
.../\345\260\217\347\250\213\345\272\217.md" | 126 ++++++++++++
.../\346\225\260\346\215\256\345\272\223.md" | 26 +++
...41\346\235\277\345\274\225\346\223\216.md" | 15 ++
"source/_posts/\351\200\202\351\205\215.md" | 32 +++
.../\351\252\250\346\236\266\345\261\217.md" | 42 ++++
21 files changed, 1165 insertions(+)
create mode 100644 "source/_posts/React\344\273\213\347\273\215.md"
create mode 100644 "source/_posts/React\350\204\232\346\211\213\346\236\266.md"
create mode 100644 "source/_posts/Vant\347\273\204\344\273\266\345\272\223.md"
create mode 100644 source/_posts/cookie.md
create mode 100644 "source/_posts/create-react-app\347\273\223\346\236\204.md"
create mode 100644 "source/_posts/es6\346\250\241\345\235\227\345\214\226.md"
create mode 100644 "source/_posts/expree \346\241\206\346\236\266.md"
create mode 100644 "source/_posts/express\351\241\271\347\233\256\347\224\237\346\210\220\345\231\250.md"
create mode 100644 "source/_posts/git\344\275\277\347\224\250.md"
create mode 100644 "source/_posts/redux\347\232\204\344\275\277\347\224\250\345\256\214\346\225\264\347\211\210.md"
create mode 100644 "source/_posts/session\346\212\200\346\234\257.md"
create mode 100644 "source/_posts/vue-cli\350\204\232\346\211\213\346\236\266.md"
create mode 100644 "source/_posts/vue-router\346\246\202\345\277\265.md"
create mode 100644 source/_posts/vuex.md
create mode 100644 "source/_posts/webpack\344\275\277\347\224\250.md"
create mode 100644 "source/_posts/websocket\344\275\277\347\224\250.md"
create mode 100644 "source/_posts/\345\260\217\347\250\213\345\272\217.md"
create mode 100644 "source/_posts/\346\225\260\346\215\256\345\272\223.md"
create mode 100644 "source/_posts/\346\250\241\346\235\277\345\274\225\346\223\216.md"
create mode 100644 "source/_posts/\351\200\202\351\205\215.md"
create mode 100644 "source/_posts/\351\252\250\346\236\266\345\261\217.md"
diff --git "a/source/_posts/React\344\273\213\347\273\215.md" "b/source/_posts/React\344\273\213\347\273\215.md"
new file mode 100644
index 0000000..90a3ee1
--- /dev/null
+++ "b/source/_posts/React\344\273\213\347\273\215.md"
@@ -0,0 +1,20 @@
+---
+title: React
+date: 2020-07-13 01:57:07
+tags: react
+---
+
+# 简介
+
+ React 是 Facebook 团队开发的一款前端框架,初期应用在 instragem 网站上,后期开源供程序员使用,优势通过虚拟 DOM 进行真实 DOM 的渲染,在渲染真实 DOM 之前,在内存中,对虚拟 DOM 进行内容对比,发现哪些 DOM 发生了改变,哪些没有改变,从而只渲染改变的 DOM,从而提升页面真实 DOM 的渲染效率。
+ diff 算法:这个算法就是对比新旧虚拟 DOM 之前的不同之处,然后在虚拟 DOM 中操作变化了的 DOM,最终将完整的虚拟 DOM 渲染到真实 DOM。
+
+# 通过文件引入的形式来使用 React
+
+1. react.js 文件:React 中的核心库文件,提供了组件功能;
+2. react-dom.js 文件:React 中操作 DOM 的库文件,使用 React 必须包含这个库文件;
+3. babel.js 文件:代码转换,React 中使用 JSX 语法来封装模板的,因此浏览器不识别,需要转化成普通的 js 代码;
+
+# JSX 介绍
+
+ javascript XML,进行 html 和 js 混合编写的一种语法,类似于 ejs。
diff --git "a/source/_posts/React\350\204\232\346\211\213\346\236\266.md" "b/source/_posts/React\350\204\232\346\211\213\346\236\266.md"
new file mode 100644
index 0000000..ff4c844
--- /dev/null
+++ "b/source/_posts/React\350\204\232\346\211\213\346\236\266.md"
@@ -0,0 +1,22 @@
+---
+title: React 脚手架
+date: 2020-07-14 01:57:07
+tags: react
+---
+
+# 安装 create-react-app
+
+ npm install create-react-app -g
+
+# 简介
+
+1. 这个脚手架是基于 webpack 构建 React 项目,内置了一个开发服务器,默认端口是 3000,可以实现实时打包,自启动等功能
+2. 创建项目命令:create-react-app react-base
+3. 启动项目命令:npm run start 或者 npm start
+4. 打包项目命令:npm run build 或者 npm build
+
+# 如何修改 webpack 配置
+
+1. npm run eject 暴露 webpack 的配置文件,可以做一些修改
+2. 关闭自启动:/scripts/start.js,将 142 行 的 **openBrowser(urls.localUrlForBrowser);** 注释即可
+3. 修改端口:packge.json 文件中:**"start": "set PORT=5000 && node scripts/start.js"**,注意:**set PORT=5000 &&**一定要写在前面
diff --git "a/source/_posts/Vant\347\273\204\344\273\266\345\272\223.md" "b/source/_posts/Vant\347\273\204\344\273\266\345\272\223.md"
new file mode 100644
index 0000000..fca620c
--- /dev/null
+++ "b/source/_posts/Vant\347\273\204\344\273\266\345\272\223.md"
@@ -0,0 +1,78 @@
+---
+title: vant 安装
+date: 2020-08-15 09:57:07
+tags: vue
+---
+
+ npm install vant
+
+# vant 配置
+
+1. 安装 `npm i babel-plugin-import -D`
+2. 配置 `babel.config.js`
+
+```
+plugins: [
+ ['import', {
+ libraryName: 'vant',
+ libraryDirectory: 'es',
+ style: true
+ }, 'vant']
+]
+```
+
+# vant 使用
+
+1. 组件需要在 main.js 中 使用 Vue.use() 注册;
+
+```
+import { Button } from "vant";
+Vue.use(Button);
+```
+
+2. 有些组件不用 Vue.use() 注册,可以当成一个函数直接调用;
+
+# vue-awesome-swiper 轮播图插件(库)
+
+ 这个 插件是基于 swiper 插件封装的,因此,swiper 中的配置对于 vue-awesome-swiper 都是有效的。
+
+1. 安装 swiper 包
+
+ npm install swiper@4
+ 注意:swiper6/5 目前对于 vue 的兼容性不是很好,不要安装最新的 swiper
+
+2. 安装 vue-awesome-swiper 包
+ 注意:这个包可以是最新版本
+
+3. 配置插件
+
+```
+import VueAwesomeSwiper from "vue-awesome-swiper";
+import "swiper/dist/css/swiper.css";
+Vue.use(VueAwesomeSwiper);
+```
+
+4. 使用
+
+```
+
+ I'm Slide 1
+ I'm Slide 2
+ I'm Slide 3
+
+
+
+swiperOption: {
+ // 指示器为 pagination 小圆点
+ // pagination: {
+ // el: ".swiper-pagination",
+ // type: "fraction",
+ // },
+
+ // 指示器为 滚动条
+ scrollbar: {
+ el: ".swiper-scrollbar",
+ hide: true,
+ },
+},
+```
diff --git a/source/_posts/cookie.md b/source/_posts/cookie.md
new file mode 100644
index 0000000..21aa866
--- /dev/null
+++ b/source/_posts/cookie.md
@@ -0,0 +1,21 @@
+---
+title: Cookie 缓存技术
+date: 2020-09-12 03:57:07
+tags:
+---
+
+### 一、HTTP 协议
+
+- 因为 HTTP 协议是无状态协议,它无法去记录请求和请求之间的关系。比如登录: 我们在一个网站的登录页面登录成功,你访问其他页面时就不需要登录了。
+
+### 二、Cookie 就是用来解决 Http 协议的问题
+
+- Cookie 是一种能够让服务器在用户的浏览器上储存数据的技术。
+- 通过这个数据,服务器就可以验证这个用户有没有登录过。
+
+[Cookie 交互截图](cookie解决登录问题.png)
+
+### 三、总结
+
+- cookie 的值是存储在浏览器端的;
+- cookie 的值是从后端得到的;
diff --git "a/source/_posts/create-react-app\347\273\223\346\236\204.md" "b/source/_posts/create-react-app\347\273\223\346\236\204.md"
new file mode 100644
index 0000000..0e24a59
--- /dev/null
+++ "b/source/_posts/create-react-app\347\273\223\346\236\204.md"
@@ -0,0 +1,80 @@
+---
+title: create-react-app结构
+date: 2020-09-16 01:57:07
+tags:
+---
+
+# 项目结构
+
+ React 项目一个 js 就是一个组件,并且每个组件都搭配一个。css 文件,用于设置组件的样式,但是这个 .css 文件不是必须的。
+
+1. 项目的入口文件(类似于 vue 中的 main.js)
+ 入口文件一般加载根组件。
+
+- index.js
+- index.css
+
+2. App.js:根组件
+3. 创建路由组件或子组件,需要自己手动创建文件夹。
+
+# React 配置 jsx 语法联想
+
+在 settings.json 文件中,添加一下代码:
+
+```
+"emmet.includeLanguages": {
+ "javascript": "javascriptreact"
+}
+```
+
+# 使用 PropTypes 进行类型检查
+
+> 注意:只检查 prop 值的类型
+
+# 渲染优化
+
+1. 父组件 state 数据变化,子组件不变,如果子组件实现了 getDerivedStateFromProps,那么要注意是否应该更新 state;子组件是否应该执行 render();
+
+# 类名作用域
+
+> React 中不管你在哪一个 .css 中设置的样式,都是一个全局样式,对所有组件都生效,一般类名都会增加一个组件前缀,区分不同的标签。
+
+# 使用 less 解决类名作用域冲突问题
+
+1. 安装插件 Easy LESS:可以自动将 .less 文件转化成 .css 文件;
+
+# React 路由
+
+安装:npm install react-router-dom
+
+### 内置组件
+
+1. BrowserRouter: 类似于 vue 中的 history 模式,是通过历史记录的方式实现路由的切换
+
+```
+// 导入路由类
+import { BrowserRouter } from "react-router-dom";
+// 用组件BrowserRouter将 包裹起来,表示用这个路由来控制整个组件的切换
+ReactDOM.render(
+
+
+ ,
+ document.getElementById("root")
+);
+```
+
+2. Route 路由
+
+- 路由的书写顺序:重定向和 404 一定要写在底部
+- 掌握路由的匹配顺序:自上而下,由外向内匹配(嵌套路由)
+- 掌握路由的严格模式和非严格模式:
+ - 严格模式:无法匹配二级路由,如果当前路由有二级路由,不要使用严格模式
+- 路由传参:动态参数、查询字符串
+- 路由组件和非路由组件:如何使用 history, match, location
+ - withRouter 高阶组件用法
+
+# 接口跨域
+
+1. package.json 文件中配置 **"proxy": "http://localhost:4000",**
+2. 下载代理包:http-proxy-middleware
+3. 修改 webpack 的源代码
diff --git "a/source/_posts/es6\346\250\241\345\235\227\345\214\226.md" "b/source/_posts/es6\346\250\241\345\235\227\345\214\226.md"
new file mode 100644
index 0000000..2e6472d
--- /dev/null
+++ "b/source/_posts/es6\346\250\241\345\235\227\345\214\226.md"
@@ -0,0 +1,26 @@
+---
+title: es6 模块化
+date: 2020-09-12 04:57:07
+tags:
+---
+
+- js 在出现初期,是没有模块化的概念的,只是单纯的作为一个脚本语言,实现一些简单的页面特效,操作 DOM 的功能,但是随着 js 的功能越来越完善,功能越来越多,js 代码的编写就变的非常难以维护,代码量大,不利于后期的管理,因此在 es6 的时候,才正式推出属于前端的模块化概念。
+
+- es6 之前,有一些第三方的库,request.js(AMD) 可以实现模块化。
+
+- nodejs 出现的时候,推出了模块化的标准(CMD),通过 require 和 module.exports 实现模块的导入和导出,但是这种模块化的标准只能 Nodejs 使用,浏览器不能使用。
+
+- es6 模块化代码,浏览器不能够直接识别,需要通过工具转换之后,才能让浏览器识别这些代码。
+
+# 使用 webpack 帮助我们转换 ES6 的高级语法
+
+ webpack 是基于 Nodejs 开发的一款打包工具,所以必须先安装 NodeJS 环境。
+
+- webpack 的作用:1. 打包静态资源,如果不打包,浏览器就要挨个去请求加载 js 文件,css 文件,图片等,打包之后,webpack 帮你合并成一个 js 文件,一个 css 文件,这样一方面可以减少浏览器请求的次数,并且打包之后的文件经过压缩的文件,体积更小;2. 转换高级语法,比如 es6, es7, es8, es9 里面的高级语法,浏览器不识别。
+
+- 安装 webpack
+
+ - npm install webpack webpack-cli -g
+
+- 执行打包命令
+ - webpack ./main.js
diff --git "a/source/_posts/expree \346\241\206\346\236\266.md" "b/source/_posts/expree \346\241\206\346\236\266.md"
new file mode 100644
index 0000000..ad3976e
--- /dev/null
+++ "b/source/_posts/expree \346\241\206\346\236\266.md"
@@ -0,0 +1,26 @@
+---
+title: expree 框架
+date: 2020-09-12 05:57:07
+tags:
+---
+
+# .md 是一个 MarkDown 文件,支持丰富的文本编辑功能
+
+#### 一、该项目是讲解 expree 框架的用法
+
+- \$ npm install express
+
+ 因为 npm 这个包管理器,它连接的是国外的服务器,因此下载包的时候,特别慢,通过切换国内镜像实现第三方包的下载。
+
+- \$ npm install nrm -g
+ nrm 这个包,就是帮你收集国内的各个厂商的镜像地址,安装好这个 nrm 包以后,通过命令可以快速切换各个国内镜像的地址。
+
+ -g 命令全局安装,默认路径安装到 C:盘目录,以后不用重复安装了。如果没有加 -g,仅在当前项目安装,其他项目不能使用。
+
+- nrm 的常用命令
+ \$ nrm ls;列举所有镜像地址
+
+ \$ nrm use 镜像名称;切换镜像地址
+
+- 解决 vscode 不提示 NodeJS 代码的问题
+ \$ npm install @types/node (安装好之后,如果还不提示,重启 vscode)
diff --git "a/source/_posts/express\351\241\271\347\233\256\347\224\237\346\210\220\345\231\250.md" "b/source/_posts/express\351\241\271\347\233\256\347\224\237\346\210\220\345\231\250.md"
new file mode 100644
index 0000000..4e4c935
--- /dev/null
+++ "b/source/_posts/express\351\241\271\347\233\256\347\224\237\346\210\220\345\231\250.md"
@@ -0,0 +1,31 @@
+---
+title: express项目生成器
+date: 2020-09-12 06:57:07
+tags:
+---
+
+# 路由
+
+1. 路由使用的两种方式;
+2. 路由如何通过路径传参;
+
+# express 项目生成器
+
+- 快速搭建 express 项目的一个工具
+- \$ npm install express -g
+- \$ npm install express-generator -g
+- \$ express 项目名称 --view=ejs
+ - --view=ejs 指定使用什么作为模板引擎
+- 项目创建完成,需要先 npm install 安装 package.json 中的包
+- 启动项目:npm start(这是 package.json 中定义的)
+
+# 项目目录结构
+
+- bin/www(创建/启动服务) + app.js(配置服务) 组合 等价于 server.js 文件,启动服务,配置服务(静态目录,模板引擎,注册路由)
+- public 等价于 www 是静态目录
+- routes 存放的都是路由模块
+- views 存放模板文件的
+
+# 文件上传功能
+
+- \$ npm install multer express
diff --git "a/source/_posts/git\344\275\277\347\224\250.md" "b/source/_posts/git\344\275\277\347\224\250.md"
new file mode 100644
index 0000000..53ff49c
--- /dev/null
+++ "b/source/_posts/git\344\275\277\347\224\250.md"
@@ -0,0 +1,50 @@
+---
+title: git
+date: 2020-09-12 07:57:07
+tags:
+---
+
+# 本地仓库 和 远程仓库
+
+1. 本地仓库
+ 你从远程仓库(码云) 中 clone 下来的项目中,有一个 .git 隐藏文件,这个文件会自动记录当前 clone 下来的项目内容有没有变动,只要有变动,就会被 .git 记录下来;
+ .git 还可以自动关联本地项目和远程仓库的项目;
+
+# 仓库的本地操作
+
+1. 只有 git push/pull 是在操作远程仓库,其余的命令 git status/log/commit/add 等,都是在操作本地仓库。
+2. 常用命令
+ git status: 查看本地仓库的状态;
+ git add .: 每次写完一个模块,都要先执行该命令,将修改的代码提交到暂存区,此时不会生成版本记录,版本号;
+ git commit -m "提交信息": 提交修改的代码到本地仓库,此时就会生成版本号,同时 .git 也会记录这个版本号,方便后期进行版本的回退;
+ git log: 用来查看当前仓库中,都有哪些 commit 提交;
+ git reset --hard 0739ae(版本号前几位): 切换 commit 版本;
+
+# 仓库的远程操作
+
+ 当本地仓库中的某一个模块完成了,本地也 commit 提交代码了,接下来将 该模块 的最新代码提交到远程仓库,只要本地仓库生成了新的提交 commit,记得 往远程仓库上推送,让远程仓库的代码和本地的提交实时保持同步。
+
+1. 推送命令
+ git push
+ git push git@gitee.com:gaohairui/poject.git
+ git push origin master
+
+# master 主分支
+
+ 作为写代码的程序员,平时写项目,不要直接在主分支 master 上修改代码,因为主分支 master 上的项目要保证是稳定的,最新的。
+
+### 普通程序员如何操作
+
+1. 先把远程项目克隆到本地(先配置 ssh,而且要成为项目的开发者);
+2. 创建子分支,开始写自己的功能;
+ git checkout -b "分支名称" (创建并切换到当前分支)
+ git checkout "分支名称" (切换分支的命令)
+3. 子分支创建完毕,写代码,代码完成之后,需要 commit 提交,为当前的子分支,生成一条提交记录。此时主分支 master 是没有这个代码提交的;
+4. 将本地子分支同步到远程子分支
+ git push --set-upstream origin "子分支名称" (会自动在远程仓库上,创建一个子分支)
+5. 子分支是最新的代码了,此时,需要将本地的 master 和 远程的主分支 master 都更新为最新代码,需要将子分支的最新代码,合并到主分支 master 上。
+6. 先合并本地的子分支内容,到主分支,然后,再将本地的主分支,推送到远程主分支;
+ git checkout master;
+ git merge user;
+ 本地的 master 是最新的
+ 在 master 分支下,执行 git push
diff --git "a/source/_posts/redux\347\232\204\344\275\277\347\224\250\345\256\214\346\225\264\347\211\210.md" "b/source/_posts/redux\347\232\204\344\275\277\347\224\250\345\256\214\346\225\264\347\211\210.md"
new file mode 100644
index 0000000..656c36a
--- /dev/null
+++ "b/source/_posts/redux\347\232\204\344\275\277\347\224\250\345\256\214\346\225\264\347\211\210.md"
@@ -0,0 +1,184 @@
+---
+title: redux
+date: 2020-07-13 01:57:07
+tags: react
+---
+
+# 安装
+
+ npm install redux react-redux -S
+
+1. redux 这个包是在 action.js store.js reducer.js 中使用的;
+2. react-redux 这个包是在 react 的组件中使用的;
+
+# Redux 概念
+
+1. store 对象:这个 store 类似于 vuex 中的全局 new Vuex 对象,负责连接 action 和 reducer,是一个核心;
+2. action 对象:类似于 vuex 中的 mutation 和 action 的集合,它既支持同步操作数据,也支持异步操作数据,主要作用就是 通过 dispatch 提交 action,触发 修改 state 数据的行为;
+3. reducer 对象:类似于 vuex 中 state 属性,负责初始化 state 数据以及更新 state 数据;
+
+# Redux 用法
+
+1. 在 ./src/store.js 文件中创建 redux 的 store 对象,用于管理 action 和 reducer
+
+ ```
+ import { createStore } from "redux";
+
+ // 导入 reducer
+ import reducer from "./reducer";
+
+ // 在创建 store 对象的时候,要进行 state 的初始化操作,因此,createStore() 函数中必须要绑定 reducer,也就是让 reducer 和 store 产生关联,这样如果后期有 action 产生的时候,store 就会将这个 action 对象,转发给 reducer。
+ let store = createStore(reducer);
+
+ // 暴露这个store对象
+ export default store;
+ ```
+
+2. 由于 store 对象初始化的时候,要同时进行 state 的初始化,因此,在 ./src/reducer.js 文件中定义出来想要保存到 redux 中的 state。
+
+ ```
+ import { combineReducers } from "redux";
+
+ // name是一个 reducer 对象,age 也是一个 reducer 对象
+ function name(state = "", action) {
+ // 暂时用不到 修改state
+ return state;
+ }
+
+ function age(state = 0, action) {
+ return state;
+ }
+
+ // combineReducers() 可以将多个 reducer 对象合并成一个 reducer 对象,因为 createStore() 中只能设置一个 reducer
+ export default combineReducers({
+ name,
+ age,
+ });
+ ```
+
+3. 在 根组件 index.js 文件中,绑定 store,让组件和 redux 进行绑定。、
+
+ ```
+ // 让 redux 中的 store 对象 和 react 中的组件产生关联;
+ import { Provider } from "react-redux";
+ // 导入 创建好的 store 对象
+ import store from "./store/store";
+
+ ReactDOM.render(
+
+
+
+
+ ,
+ document.getElementById("root")
+ );
+ ```
+
+4. 可以在任何一个组件中,去使用 redux 中的数据了。
+
+ ```
+ import { connect } from "react-redux";
+ // connect()(Home) 该方法并不会修改原有组件 Home 的内容,仅仅是在 Home 组件的基础上包装上了 Redux 的内容
+ // connect(参数1,参数2):这两个参数都是函数,并且connect在执行函数回调的时候,会传递两个参数进来,一个参数就是state,这个state内,存储的就是 reducer.js 中声明的 数据(name,age)。
+ export default connect(
+ (state) => {
+ return {
+ myName: state.name, // 相当于在当前 Home 组件中映射一个属性叫 myName,当前组件就可以使用 myName
+ myAge: state.age, // 相当于在当前 Home 组件中映射一个属性叫 myAge,当前组件就可以使用 myAge
+ };
+ },
+ (dispatch) => {
+ return {};
+ }
+ )(Home);
+ ```
+
+ **注意:组件中映射的 myName 和 myAge 属性,都被放在了 当前组件的 props 中。**
+
+5. 如何通过 派发 action ,修改 state 的数据
+
+ action.js 文件中定义 各种 action
+
+ ```
+ // 定义 修改name 的action
+ function setName(value) {
+ return {
+ type: "SET_NAME",
+ value,
+ };
+ }
+
+ // 定义 修改age 的action
+ function setAge() {
+ return {
+ type: "SET_AGE",
+ };
+ }
+
+ export { setName, setAge };
+ ```
+
+ 在组件中映射 action 到当前组件
+
+ ```
+ (dispatch) => {
+ return {
+ // 目的:在当前组件中映射一个方法,方法名称是 customChangeName。
+ customChangeName(name) {
+ dispatch(setName(name)); // 派发action,交给 store,store 对象会将 这个 action,传递到 reducer 中进行全局匹配,看哪一个 reducer 能够匹配这个action
+ },
+ };
+ }
+ ```
+
+总结:用户 派发 action -> store 转发 action 到 reducer(不需要我们处理) -> reducer 根据 action 更新 state,并返回最新的 state -> store 将最新的 state 返回到组件的 props 中(不需要我们做) -> props 变化导致组件被渲染,更新页面。
+
+6. 异步 Action
+
+ - 安装包 npm install redux-thunk
+ - 修改 store.js 文件,让 store 能够使用这个 thunk 中间件处理异步请求
+
+ ```
+ import { createStore, applyMiddleware } from "redux";
+ import thunk from "redux-thunk"; // 一个处理异步 action 的包
+ // applyMiddleware(thunk): 让 store 对象使用中间件 thunk 来处理 action
+ let store = createStore(reducer, applyMiddleware(thunk));
+ ```
+
+ - 在 action.js 中定义异步 action
+
+ ```
+ function saveUsers(list) {
+ return {
+ type: "SAVE_USERS",
+ list,
+ };
+ }
+
+ // 带有异步请求的 action:使用场景 多个组件都要向这个接口发请求,并且都要使用请求过来的数据。
+ function queryUsers() {
+ return (dispatch) => {
+ axios.get("http://localhost:4000/users").then((res) => {
+ // 请求成功的数据,要保存redux中
+ // 通过派发 action ,让 store 去找相应的 reducer。
+ dispatch(saveUsers(res.data));
+ });
+ };
+ }
+ ```
+
+ - 在组件中,映射 reducer 和 异步请求的 action
+
+ ```
+ (dispatch) => {
+ return {
+ // 目的:在当前组件中映射一个方法,方法名称是 customChangeName。
+ customChangeName(name) {
+ dispatch(setName(name)); // 派发action,交给 store,store 对象会将 这个 action,传递到 reducer 中进行全局匹配,看哪一个 reducer 能够匹配这个action
+ },
+ queryUsers() {
+ dispatch(queryUsers());
+ },
+ };
+ }
+ ```
diff --git "a/source/_posts/session\346\212\200\346\234\257.md" "b/source/_posts/session\346\212\200\346\234\257.md"
new file mode 100644
index 0000000..17aa179
--- /dev/null
+++ "b/source/_posts/session\346\212\200\346\234\257.md"
@@ -0,0 +1,9 @@
+---
+title: Session技术
+date: 2020-09-12 08:57:07
+tags:
+---
+
+- 它是另外一种用来记录用户状态的机制,Cookie 是由服务端生成,客户端存储。而 session 是由服务端生成,服务端存储。
+- 当浏览器访问服务器的时候,服务器会自动生成一个 session 对象,这个对象是以 { key: value } 形式来保存加密数据(用来证明你是否登录过)的,同时服务器会将这个 session 对象中的 key 返回给浏览器。以后浏览器只要发送请求,自动携带这个 key ,传给服务器,服务器对这个 key 进行验证。
+- \$ npm install express-session
diff --git "a/source/_posts/vue-cli\350\204\232\346\211\213\346\236\266.md" "b/source/_posts/vue-cli\350\204\232\346\211\213\346\236\266.md"
new file mode 100644
index 0000000..370fce4
--- /dev/null
+++ "b/source/_posts/vue-cli\350\204\232\346\211\213\346\236\266.md"
@@ -0,0 +1,103 @@
+---
+title: vue-cli 脚手架
+date: 2020-08-12 10:57:07
+tags: vue
+---
+
+# 脚手架的概念
+
+ 可以帮助我们快速搭建项目,启动服务,减少这些重复性的工作。并且脚手架中包含了项目中常用的包,比如:webpack(babel、loader),项目更加规范化,维护起来更加方便。
+
+# 安装
+
+ \$ npm install @vue/cli -g
+
+- 安装完毕,通过 `vue -V` 检查脚手架是否可用。
+
+# 创建项目
+
+1. 命令
+ cd
+
+- \$ vue create "项目名称"
+
+ **注意:创建的时候,会让你选择一些配置项。**
+
+2. 项目目录结构
+
+- package.json
+ ```
+ "scripts": {
+ "serve": "vue-cli-service serve", // 类似于 webpack-dev-server,调试阶段实时打包编译,只不过代码都是放在内存中了。
+ "build": "vue-cli-service build" // 最终的项目构建使用build,类似之前的webpack,在当前项目下生成 dist 目录。
+ },
+ ```
+- src 目录
+
+ 是项目的源代码文件,所有代码,组件/js/css 等都放在该目录下
+
+- main.js 文件
+
+ 是整个项目的入口文件,项目启动就会加载该文件。当项目启动时,webpack 也会自动对该文件进行打包,放到内存中。
+
+- App.vue 文件
+
+ 根组件的模板内容,项目启动之后,首先要加载的模板内容。.vue 是一个单文件组件,每个组件都有 `,