1. vuex是什么
vuex是vue的一个插件。简单点说,vuex是对 vue 应用中多个组件的共享状态进行集中式的管理(读/写)。
2. 状态自管理应用
单向数据流概念图
- state,驱动应用的数据源;
- view,以声明方式将 state 映射到视图;
- actions,响应在 view 上的用户输入导致的状态变化。
![](https://i-blog.csdnimg.cn/blog_migrate/fbbf5249c43f37a7874bfa91e45285cc.png)
3. 多组件共享状态的问题
- 多个视图依赖于同一状态
- 来自不同视图的行为需要变更同一状态
- 以前的解决办法
a. 将数据以及操作数据的行为都定义在父组件
b. 将数据以及操作数据的行为传递给需要的各个子组件(有可能需要多级传递) - vuex 就是用来解决这个问题的
3.1 Vuex 背后的基本思想
![](https://i-blog.csdnimg.cn/blog_migrate/a075836e171644625dcc0a48f36d6336.png)
1.3.2 state
- vuex 管理的状态对象
- 它应该是唯一的
const state = {
xxx: initValue
}
1.3.3 mutations
- 包含多个直接更新 state 的方法(回调函数)的对象
- 谁来触发: action 中的 commit(‘mutation 名称’)
- 只能包含同步的代码, 不能写异步代码
const mutations = {
yyy (state, {data1}) {
}
}
1.3.4 actions
- 包含多个事件回调函数的对象
- 通过执行: commit()来触发 mutation 的调用, 间接更新 state
- 谁来触发: 组件中: $store.dispatch(‘action 名称’, data1) // ‘zzz’
- 可以包含异步代码(定时器, ajax)
const actions = {
zzz ({commit, state}, data1) {
commit('yyy', {data1})
}
}
1.3.5 getters
- 包含多个计算属性(get)的对象
- 谁来读取: 组件中:
$store.getters.xxx
const getters = {
mmm (state) {
return ...
}
}
1.3.6 modules
- 包含多个 module
- 一个 module 是一个 store 的配置对象
- 与一个组件(包含有共享数据)对应