Vuex之Mutation

作者: me_coder | 来源:发表于2019-12-09 16:23 被阅读0次

更改 Vuex store 中的 state 的唯一方法是 commit mutation

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    //接受state作为第一个参数
    increment (state) {
      // 变更状态
      state.count++
    }
  }
})

使用方法:

store.commit('increment')

提交载荷(Payload)

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

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

在大多数情况下,载荷应该是一个对象:

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

对象风格的提交方式

store.commit({
  type: 'increment',
  amount: 10
})

Mutation 需遵守 Vue 的响应规则

1、最好提前在 store 中初始化好所有所需属性;
2、当需要添加新属性时,应该:
-使用 Vue.set(obj, 'newProp', 123)
-使用新对象替换老对象,如使用对象展开运算符可以写成:

state.obj = { ...state.obj, newProp: 123 }

使用常量替代 Mutation 事件类型

作用:可以使 linter 之类的工具发挥作用,同时把这些常量放在单独的文件中可以让你的代码合作者对整个 app 包含的 mutation 一目了然:

// mutation-types.js
export const SOME_MUTATION = 'SOME_MUTATION'
// store.js
import Vuex from 'vuex'
import { SOME_MUTATION } from './mutation-types'

const store = new Vuex.Store({
  state: { ... },
  mutations: {
    // 我们可以使用 ES2015 风格的计算属性命名功能来使用一个常量作为函数名
    [SOME_MUTATION] (state) {
      // mutate state
    }
  }
})

Mutation 必须是同步函数

因为任何在回调函数中进行的状态的改变都是不可追踪的。

在组件中提交 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')`
    })
  }
}

相关文章

  • Vuex之Mutation

    更改 Vuex store 中的 state 的唯一方法是 commit mutation : 使用方法: 提交载...

  • Vuex之mutation

    我们已经可以在组建中使用store里面的数据了,那么我们要怎么修改这个数据呢?vuex提供了mutation,官网...

  • vuex Mutation

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

  • Vuex使用介绍(二)

    Mutation Vuex 通过commit一个mutation来对state进行更改。每个 mutation 都...

  • vuex---核心概念Mutation

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

  • vuex-Mutation

    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常...

  • vuex_Mutation_04

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

  • Vuex--Mutation

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

  • Vuex部分问题

    Vuex问题 1、提示 [vuex] unknown mutation type: 问题代码 //使用store....

  • 快速入门Vuex 魔法

    Vuex核心 Store State Mutation Action Module Vuex 的工作流程图 下面我...

网友评论

    本文标题:Vuex之Mutation

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