Vuex详解(三)

122 阅读1分钟

1.mutations和actions的区别

Vuex要求我们mutations的方式是同步的,原因是我们检查Vue有一个工具叫devtools。如果我们直接往mutations中写入异步的方式,比如setTimeout()的异步方式,页面之中的变量是会发生改变的,但是devtools监测不到该变量的改变,就会出现一个变量不平均的问题,引用coderwhy老师一张图

image.png

如果需要异步代码的时候,请到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推荐的树状结构模式

image.png