1.直接调用mutations
(1).直接使用
this.$store.commit('mutation名', 参数)
(2).map辅助函数
methods: {
...mapMutations(['mutation名']),
...mapMutations({'新名字': 'mutation名'})
}
2.使用modules中的mutations(namespaced:true)
(1).直接使用
this.$store.commit('模块名/mutation名', 参数)
(2).map辅助函数
methods: {
...mapMutations('模块名', ['mutation名']),
...mapMutations('模块名',{'新mutation名': 'mutation名'})
}
小结---->mutations的中文含义是:变异。 它是Vuex中用来修改公共数据的唯一入口。
注意 ! ! ! 在定义时--> 它的第一个参数是state,第二个参数是载荷
常见的问题
为什么是store.mutations的名字()?
Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler) 。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。
数据不可以该在组件内部直接修改吗?
不能。虽然语法上不报错,也有响应式的特点。但是不推荐。特别是在严格模式下会报错。若将vue创建 store 的时候传入 strict: true, 开启严格模式,那么任何修改state的操作,只要不经过 mutation的函数,vue就会报错
可以传递多个数据吗?
参数只能有一个:下面的写法是不对的:
this.$store.commit('setUrl', url, host) //host这个参数将无法被接收到
如果希望传递复杂的数据,第二个参数可以是对象,例如下面的写法
this.$store.commit('setUrl', { url, host} )