1.mutations和actions的区别
Vuex要求我们mutations的方式是同步的,原因是我们检查Vue有一个工具叫devtools。如果我们直接往mutations中写入异步的方式,比如setTimeout()的异步方式,页面之中的变量是会发生改变的,但是devtools监测不到该变量的改变,就会出现一个变量不平均的问题,引用coderwhy老师一张图
如果需要异步代码的时候,请到actions里面
2.actions提交异步代码
点击触发handleClick事件,异步代码要到actions,用dispatch来进行分发,actions中的默认参数,我们可以把其看成Vuex中的store对象,对异步代码进行commit提交,才能到mutations进行同步代码的处理
<h2 @click="handleClick"></h2>
methods: {
handleClick(){
this.$store.dispatch('submitInfo')
}
},
mutations:{
increament(){
state.state++
}
},
actions:{
submitInfo(context){
setTimeout(()=>{
content.commit('increament')
},1000)
}
},
3.dispatch返回的是promise
methods: {
handleClick(){
this.$store.dispatch('submitInfo','返回的信息').then((res)=>{
console.log(res);
})
}
},
actions:{
submitInfo(context,payload){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
content.commit('increament')
console.log(payload);
resolve('dispatch返回的是一个promise')
},1000)
})
}
},
4.modules
modules就是一个模块
问:为啥还出现modules呢?
答:因为Vuex推荐的是单一状态树,意思是在一个项目里面,最好就只创建一个store对项目进行管理,但是可以通过modules进行多小组块之间的管理,也是Vue推荐的树状结构模式