背景
什么是 vuex
vuex 是一种状态管理模式,或者说我们可以称其为数据中心。
为什么使用 vuex
这就相当于一个集团,集团下有很多下属公司。下属公司大了之后,有些事务可能是需要集团总部集中处理,以便提高效率,降低人员冗余。vuex 就是相当于这个中央数据处理部门。我们可以把 vuex 看做总部集团保存的各下属公司都可能用到的数据。
何时使用 vuex
相对于本地组件直接调用数据而言,vuex 操作更加复杂,而且也意味着额外的一些开销。
vuex 的替代方案
- props
- provide/inject
- Portals/ Portal-Vue
参照以下文档:
安装 vuex
npm install vuex --save
建立一个 vuex
- 在入口文件
main.js
中引入并使用
1 | import Vuex from 'vuex' |
- 按照 vuex 的模式建立一个文件
文件:src/store/store.js
1 | import Vue from 'vue'; |
- 将 store 文件挂载在 vue 实例下
1 | new Vue({ |
vuex 中的四个概念
vuex 中有四个概念:state、mutations、getters、actions。我们可以想象为这是总公司管理公共数据的一个部门,这个部门执行的严格管理的策略。state,代表的是这个部门管理的公共数据;mutations:对内事务管理部,修改 state,由 mutations 执行,也就是时候,要修改 state,必须经过 mutations;getters:对外输送数据部门,只输送数据,不进行其他操作;actions,中心事件,可存储中心事件,也可调用内部事件,也就是说,要进行内部事件的调用,必须由 actions 对接。
state
存储一个中心数据
1 | const state = { |
mutations
修改一个中心数据
1 | const mutations = { |
getters
向模板返回一个中心数据,类似于 computed
格式:
1 | const getters = { |
举例:
1 | const getters = { |
actions
编写一个内部事件
1 | const actions = { |
调用内部事件并向模板返回,通过commit
通行证
格式
1 | const actions = { |
1 | const actions = { |
子部门和中心部门通信
我们通过对外的部门获得 vuex 存储的中心数据和操作中心事件
- 在 componnets 文件中导入
1 | import { mapGetters } from 'vuex'; |
- 在 computed 中返回中心数据,在 methods 中返回中心事件
1 | methods: {...mapActions(['add'])}, |
- 在模板中调用
1 | 计数:{{count}} |
- 总结
- 获取中心数据:Module –> Getters –> State
- 操作中心数据:Module –> Actions –> Mutations –> State
vuex 实例
计数器
- 工具:npm/cnpm/nodejs,
- 此处为 cnpm 安装 cnpm `npm install -g cnpm –registry=https://registry.npm.taobao.org
- 安装 vue-cli
cnpm install vue-cli -g
- 利用 webpack 生成一个 vue 项目,名称为 vuex-test
vue init webpack vuex-test
- 进入 vuex-test 并运行查看
1 | cd vuex-test |
- 安装 vuex 并在入口文件 main.js 中引入
1 | // 命令行 |
- 新建一个
vuex-test/src/store/index.js
文件 - 根据 store 模板写入 index.js 文件
1 | import Vue from 'vue'; |
- 在
main.js
中引入并将其挂载在 vuex 下
1 | import store from './store/index' |
- 在
store.js
中声明一个数据count
,并为其写一个内部操作事件和外部调用事件
1 | // 声明count |
- 新建
src/components/add-count.vue
- 在
add-count
文件中写入以下内容
1 | <template> |
- 在
HelloWorld
文件中调用add-count.vue
文件。
写入以下内容
1 | <template> |
- 效果