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 是一个单文件组件,每个组件都有 `