一、vuex解决的问题以及使用场景
- 组件开发中头疼的问题
- 数据一般都在父组件加载,向子组件传递,当出现跨多层级数据传递的时候,相对麻烦
- 状态是什么
- 应用于各组件、各模块之间的公共数据
- 多段代码的使用的公共变量抽取出来,用于判断执行的逻辑
- 状态数据的两个特点
- 数据共享
- 数据的变更将导致影响的产生
- Vuex状态管理
- Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规格保证状态
- 状态集中式管理
- 将多个组件中的公共数据,单独抽取到一个公共对象内进行存储,并且这个公共存储对象是一个单例
- 实现公共状态的响应式编程
- state的变化导致引用该状态的视图组件view也发生变化
使用场景
Vuex插件的安装
- 添加vuex的依赖: “vuex”: “^3.6.2”
- src下创建store文件,引入Vuex并使用
计数器组件基础代码
mutations的作用
- 直接对$store.state的状态进行赋值,可以实现响应式的
- 但是无法对状态进行跟踪,只能看到状态的结果
- mutation是实际上对state状态进行操作的自定义方法,通过触发mutations方法修改stateke可以留痕
- mutation自定义方法里面必须进行同步操作
mutations带参数
mutations中声明的方法,只能携带一个参数,需要使用多个参数时,使用payload对象声明
mutations基本使用
add(state) {
state.counter++;
},
sub(state) {
state.counter--;
}
mutations携带参数
add(state, num) {
state.counter += num;
},
sub(state, num) {
state.counter -= num;
}
mutations携带多个参数-payload
add(state, payload) {
state.counter += payload.num * payload.multiple;
},
sub(state, payload) {
state.counter -= payload.num * payload.multiple;
}
四、全局计算属性getters
getters相当于全局的计算属性,可以对state中声明属性进行读取
mutations中只能声明同步的方法,vuex需要进行异步操作时,需要在actions中声明,返回一个Promise对象
modules划分的意义
- 模块很多时,减少store的臃肿
- 如何组织modules代码
- 模块外部引用模块内的状态
- 模块A的定义
- 模块外的引用
- $store.state.a.counter
- $store.state.a.commit
- 模块A的定义
- 模块内引用全局的状态