美文网首页
Vuex--Mutation

Vuex--Mutation

作者: inyourface | 来源:发表于2020-03-09 17:11 被阅读0次

Mutation

更改Vuex的store中的状态的唯一方法就是提交mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    increment (state) {
      // 变更状态
      state.count++
    }
  }
})

你不能直接调用一个 mutation handler。这个选项更像是事件注册:“当触发一个类型为 increment 的 mutation 时,调用此函数。”要唤醒一个 mutation handler,你需要以相应的 type 调用 store.commit 方法:

store.commit('increment')

载荷(Payload)

可以向store.commit传入额外的参数,即mutation的载荷:

mutations: {
  increment (state, n) {
    state.count += n
  }
}
store.commit('increment', 10)

在大多数情况下,载荷应该是一个对象,这样可以包含多个字段并记录的mutation更易读:

mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}
store.commit('increment', {
  amount: 10
})

在组件中提交Mutation

在组件中使用this.$store.commit('xxx')提交mutation,或者使用mapMutations辅助函数将组件中的methods映射为store.commit调用(需要在根节点注入store)

import { mapMutations } from 'vuex'

export default {
  // ...
  methods: {
    ...mapMutations([
      'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`

      // `mapMutations` 也支持载荷:
      'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.commit('incrementBy', amount)`
    ]),
    ...mapMutations({
      add: 'increment' // 将 `this.add()` 映射为 `this.$store.commit('increment')`
    })
  }
}

mutation(提交更改数据的方法,同步!必须是同步函数):

使用vuex修改state时,有两种方法:
(1)可以直接使用this.$store.state.变量 = xxx;

(2)this.$store.dispatch(actionType, payload);

(3)this.$store.commit(commitType, payload)

main.js

const store = new Vuex.Store({
  strict: true,            //    strict: true, 若开启严格模式只要不经过 mutation的函数,则会报错
  state: {
    cartNum: 0,          // 购物车数量
  },
  mutations: {
    // 加1
    INCREMENT(state) {
      state.cartNum++;
    },
  }
})

index.vue

import baseStore from '../../../main.js';
methods: {
      addCarts () {
                baseStore.commit('INCREMENT')
     },     
}

异同点:
1.共同点:能够修改state里的变量,并且是响应式的(能触发视图更新)
2.不同点:若将vue创建store的时候传入strict:true,开启严格模式,那么任何修改state的操作,只要不经过mutation函数,vue就会 throw error

相关文章

  • Vuex--Mutation

    Mutation 更改Vuex的store中的状态的唯一方法就是提交mutation。Vuex 中的 mutati...

网友评论

      本文标题:Vuex--Mutation

      本文链接:https://www.haomeiwen.com/subject/ipupdhtx.html