如何全局使用vuex中的mutations(修改数据)属性

2,866 阅读1分钟

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.commit(mutations的名)而不是store.commit('mutations的名字')而不是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} )