一、mutations属性介绍

是唯一一种方式来修改state中的状态的;在组件的自定义方法中,使用this.$store.commit(‘对应mutations中的方法’, 新的值)方法,把新的值提交给mutations中相对应的方法,mutations属性中的每个方法中有两个参数,分比为state和payload;state其实就是vuex中的state属性,payload叫做mutations的载荷,其实就是传过来的值。一般payload传的是一个对象,这样可以包含多个字段并且记录的 mutation 会更易读:

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

二、对象风格的提交方式

提交 mutation 的另一种方式是直接使用包含 type 属性的对象:

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

当使用对象风格的提交方式,整个对象都作为载荷传给 mutation 函数,因此 handler 保持不变:

mutations: {increment (state, payload) {state.count += payload.amount}
}

三、使用常量替代 Mutation 事件类型

使用常量替代 mutation 事件类型在各种 Flux 实现中是很常见的模式。这样可以使 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 必须是同步函数。为什么?请参考下面的例子:

mutations: {someMutation (state) {api.callAsyncMethod(() => {state.count++})}
}

现在想象,我们正在 debug 一个 app 并且观察 devtool 中的 mutation 日志。每一条 mutation 被记录,devtools 都需要捕捉到前一状态和后一状态的快照。然而,在上面的例子中 mutation 中的异步函数中的回调让这不可能完成:因为当 mutation 触发的时候,回调函数还没有被调用,devtools 不知道什么时候回调函数实际上被调用——实质上任何在回调函数中进行的状态的改变都是不可追踪的。

五、在组件中提交 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中的mutations属性详解相关推荐

  1. Vuex中的state属性详解

    一.state属性介绍 state属性是Vuex中用于存放组件之间共享的数据:也就是说,我们把一些组件之间共享的状态主要存放在state属性中:它采用的是单一状态树--用一个对象就包含了全部的应用层级 ...

  2. Vue 中的 ref 属性详解

    Vue 中的 ref 属性详解 我们先来读一下vue的官方文档 我们来分析官方文档 首先ref的引用是相当于一个DOM节点(如果是子组件则指向的是其实例),而且是一个string类型的值. 通俗的将就 ...

  3. android中xml tools属性详解

    第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...

  4. android中xmlns:tools属性详解

    第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...

  5. [暑假]<script>标签中的type属性详解

    type属性是必须写的属性吗? 不写的情况: <script>标签中的type属性不是必须写的属性, 因为按照惯例,这个值始终都是"text/javascript", ...

  6. Android中的windowSoftInputMode属性详解

    如何实现软键盘不自动弹出,使用的方法是设置android:windowSoftInputMode属性.那么,这个属性到底是干什么的,他有什么作用呢?今天这篇文章,就是探索android:windowS ...

  7. CSS中的text-overflow属性详解 (控制文字在一行显示,超出部分加省略号)

    text-overflow: ellipsis; 表示当文本内容超出所在容器的宽度时,用省略号来代替超出的部分. white-space:nowrap; 表示文本不换行. overflow: hidd ...

  8. HTML/CSS中文本text属性详解

    我们可以通过添加一些HTML标记和CSS属性来设置text文本的样式. HTML中的标记包括结构化标记和语义化标记两种,结构化标记简单来说是用来标记标题和段落的,而语义化标记则是不会影响到网页的结构. ...

  9. html5属性详解,HTML5中的download属性详解

    一.download属性是个什么? 如果我们想实现点击上面的下载按钮下载一张图片,你会如何实现? 我们可能会想到一个最简单的方法,就是直接按钮a标签链接一张图片,类似下面这样: 下载 但是,想法虽好, ...

最新文章

  1. mysql 如何将一个库的一个表的数据复制到另一个库中的一个表
  2. 代码整洁之道——童子军军规
  3. ffmpeg 获取帧率_项目实战:Qt+FFmpeg录屏应用(支持帧率、清晰度设置)
  4. 信息论-Shannon entropy-Kullback-Leibler (KL) divergence-cross-entropy
  5. variable 'xxx' unsafe in 'case'的处理
  6. mysql json mybatis_mybatis支持json,Spring boot配置
  7. 二维数组作为形参,传递二维数组的值
  8. OpenShift Security (3) - 准备客户端环境和演示应用
  9. 8种处理VMware报错的高效方法
  10. CS游戏控制台命令大全(来自网络)
  11. 利用计算机指令清理垃圾,计算机Dos处理,编写一键清理系统垃圾的bat代码,小白都可以学...
  12. 万字深度报告丨数据中心投资价值全解析
  13. Adobe Reader Acrobat Pro XI在连网下打开几秒后,卡顿并自动退出问题解决措施
  14. STM32G4 蓝桥杯嵌入式 IIC AT24C02储存器
  15. VCP回声调试参数说明
  16. 物理隔离下的数据交换平台难点解析与实践(一)
  17. 根据IP进行城市定位
  18. 英语词根记忆法(5)
  19. 科技创新 赋能可循环发展
  20. 免费的Web3在线技术学习平台:Moonbuilders Academy入门指南

热门文章

  1. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组
  2. SSM(4) —— 登录验证(拦截)
  3. Linux,用户与用户组的创建与分配
  4. 国家禁用的化妆品和护肤品名单,快看看有没有你正在使用和曾经使用过的?
  5. 网卡收发包的offload总结
  6. 异物卡喉应如何正确诊疗
  7. 使用Token进行身份验证
  8. Kafka原理详细介绍
  9. linux ntp 无法同步时间,ntpdate和ntpd无法在Linux上同步时钟
  10. 时间函数(运行时间、执行时间、定时)