Mutation

mutation 用于变更 Store 中的数据。

  1. 只能同过 mutation 变更 Store 数据,不可以直接操作 Store 中的数据。
  2. 通过这种方式虽然繁琐,但是可以集中监控所有数据的变化。
  3. mutation 必须同步执行

mutation 对象中的函数会有一个 state 预置参数。

  1. // store/index.js
  2. const ADD = 'add'
  3. const store = new Vuex.Store({
  4. state: {
  5. count: 0
  6. },
  7. mutations: {
  8. add(state,paylaod){
  9. // 变更数据
  10. state.count+=paylaod.amount
  11. },
  12. [ADD](state){
  13. state.count+=paylaod.amount
  14. }
  15. }
  16. })

触发 mutation 第一种方式

  1. // 组件中
  2. methods: {
  3. handleBtn(amount) {
  4. this.$store.commit('add', { amount })
  5. }
  6. },
  7. // or
  8. methods: {
  9. clickHandler(n) {
  10. this.$store.commit({
  11. type: 'subtract',
  12. n
  13. })
  14. }
  15. },

触发 mutation 第二种方式:mapMutation 辅助函数

  1. methods: {
  2. // 将指定的 mutation 函数,映射为当前组件的 method
  3. ...mapMutations(['subtract']),
  4. },