博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Vuex系列] - Mutation的具体用法
阅读量:6848 次
发布时间:2019-06-26

本文共 1958 字,大约阅读时间需要 6 分钟。

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。

接下来我们还是用上一篇文章在state中存放的count为例,来看利用Mutation修改state的count属性。

利用commit来触发mutation函数

在mutation函数中添加count的add函数

const mutations = {  addNum (state) {    state.num++  },  add (state) {    state.count += 2  }}export default mutations复制代码

在组件中使用mutation进行实现叠加器

复制代码

Mutation的载荷(payload)

你可以向store.commit传入额外的参数,即mutation的载荷(payload):我们还是以上面累加器的例子来实现mutation函数的传参,来动态定义累加的数量。

在mutation.js中修改add方法

const mutations = {  addNum (state) {    state.num++  },  add (state, n) {    state.count += n  }}export default mutations复制代码

在组件中store.commit如何传参

复制代码

在mutation传参(载荷)可以传递一个参数也可以传递一个对象。让我们修改下上面的例子

mutation.js文件中修改如下

const mutations = {  addNum (state) {    state.num++  },  add (state, payload) {    state.count += payload.amount  }}export default mutations复制代码

组件中修改如下

复制代码

在store.commit中可以进行对象风格的提交

依据上面的例子,我们将组件中内容修改如下

复制代码

使用常量替代 Mutation 事件类型

使用常量替代mutation事件类型在各种Flux实现中是很常见的模式。这样可以使 linter之类的工具发挥作用,同时把这些常量放在单独的文件中可以让你的代码合作者对整个项目包含的mutation一目了然。这在在需要多人协作的大型项目中,这会很有帮助。

我们在store中新建mutation-types.js文件,文件内容如下

export const SOME_MUTATION = 'SOME_MUTATION'复制代码

在mutation.js文件内容如下

import { ADD } from './mutation-types'const mutations = {  addNum (state) {    state.num++  },  [ADD] (state) {    state.count++  }}export default mutations复制代码

在组件中内容和之前一致

复制代码

在组件中使用this.$store全局属性来触发mutation函数

复制代码

在组件中使用mapMutations辅助函数

复制代码

Mutation一条重要的原则就是要记住 mutation 必须是同步函数

转载于:https://juejin.im/post/5cbf3301f265da03452bdc7e

你可能感兴趣的文章