[Vuex系列] - Mutation的具体用法

更改 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进行实现叠加器

<template><div class="mutation"><p>{{ count }}</p><button @click="addCount">+ADD</button></div>
</template><script>
import store from '@/store/store'
export default {computed: {count () {return this.$store.state.count}},methods: {addCount () {store.commit('add')}}
}
</script>

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如何传参

<template><div class="mutation"><p>{{ count }}</p><button @click="addCount">+ADD</button></div>
</template><script>
import store from '@/store/store'
export default {computed: {count () {return this.$store.state.count}},methods: {addCount () {store.commit('add', 5)}}
}
</script>

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

mutation.js文件中修改如下

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

组件中修改如下

<template><div class="mutation"><p>{{ count }}</p><button @click="addCount">+ADD</button></div>
</template><script>
import store from '@/store/store'
export default {computed: {count () {return this.$store.state.count}},methods: {addCount () {store.commit('add', { amount: 10 })}}
}
</script>

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

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

<template><div class="mutation"><p>{{ count }}</p><button @click="addCount">+ADD</button></div>
</template><script>
import store from '@/store/store'
export default {computed: {count () {return this.$store.state.count}},methods: {addCount () {store.commit({type: 'add',amount: 8})}}
}
</script>

使用常量替代 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

在组件中内容和之前一致

<template><div class="mutation"><p>{{ count }}</p><button @click="addCount">+ADD</button></div>
</template><script>
import store from '@/store/store'
export default {computed: {count () {return this.$store.state.count}},methods: {addCount () {store.commit('add')}}
}
</script>

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

<template><div class="mutation"><p>{{ count }}</p><button @click="add">+ADD</button></div>
</template><script>
export default {computed: {count () {return this.$store.state.count}},methods: {add () {this.$store.commit('add')}}
}
</script>

在组件中使用mapMutations辅助函数

<template><div class="mutation"><p>{{ count }}</p><button @click="add">+ADD</button></div>
</template><script>
import { mapMutations } from 'vuex'
export default {computed: {count () {return this.$store.state.count}},methods: {...mapMutations(['add'])}
}
</script>

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

 

转载于:https://www.cnblogs.com/wangshucheng/p/vux-003.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IEEE Fellow李世鹏 :人工智能与机器人前沿研究之思考

来源&#xff1a;AI科技评论作者&#xff1a;维克多编辑&#xff1a;青暮2021年12月9日&#xff0c;由粤港澳大湾区人工智能与机器人联合会、雷峰网合办的第六届全球人工智能与机器人大会&#xff08;GAIR 2021&#xff09;在深圳正式启幕&#xff0c;140余位产学领袖、30位Fel…

2.3.2. 进程互斥的软件实现方法

2.3.2. 进程互斥的软件实现方法 文章目录2.3.2. 进程互斥的软件实现方法1.知识总览2.单标志法3.双标志先检查法4.双标志后检查法5. perterson算法6. 知识回顾1.知识总览 2.单标志法 3.双标志先检查法 4.双标志后检查法 5. perterson算法 6. 知识回顾

PHP中 .= 的意思

. 在php中是字符串连接的意思 例如&#xff1a; $a a; $a . bc; $a abc; 类似 - * / 也就是说$a a.bc 当变量$a的值为 a 时 执行$a . bc 结果为$a abc 当变量$a的值为 x 时 执行$a . bc 结果为$a xbc转载于:https://www.cnblogs.com/zhangcheng001/p/11203202.html

哲学的终极解释:48张图了解48种主义

来源&#xff1a;今日头条编辑&#xff1a;nhyilin哲学家建立了事物的基本概念&#xff0c;我们在讨论中遵循它&#xff0c;有时误用它&#xff0c;有时颠覆它。以下48个基本概念常常出现在公共讨论里&#xff0c;伦敦设计师Genis Carreras用最简单的线条、形状和色块对它们进行…

2.1.5编码与调制(1)

文章目录2.1.5编码与调制(1)1.基带信号与宽带信号2. 编码与调制2.1.5编码与调制(1) 1.基带信号与宽带信号 2. 编码与调制

改名Meta俩月,脸书放弃虚拟现实操作系统:负责人跳槽谷歌

来源&#xff1a;机器学习研究组订阅元宇宙&#xff0c;到头来还得是安卓系统&#xff1f;这些年来&#xff0c;facebook 在增强现实和虚拟现实领域投入了大量资金。扎克伯格甚至已经把公司名称改成了 Meta&#xff0c;认为元宇宙将是公司未来的主营业务&#xff0c;不过理想很…

2.2物理层传输介质

2.2物理层传输介质 文章目录2.2物理层传输介质1. 传输介质和分类2.导向性传输介质--1.双绞线3.导向性传输介质--2.同轴电缆4.非导向性传输介质思维导图1. 传输介质和分类 2.导向性传输介质–1.双绞线 3.导向性传输介质–2.同轴电缆 4.非导向性传输介质 思维导图

C#拼装JSON数组简易方法

下面是我们想要拼接出来的JSON字符串&#xff0c;返回给前台 1 {"success":"true","msg":"","data":[{"macName":"正面预拼装机","state":1.0},{"macName":"正面拼板压力架&q…

IEEE年终AI大盘点:网友教会GPT-3骂人、DeepMind再造机器人

来源&#xff1a;新智元【导读】2021年即将过去&#xff0c;IEEE Spectrum盘点了今年的十大AI新闻。在过去的一年里&#xff0c;AI模型训练成本起飞、GPT-3从网友那儿学会了「阴阳怪气」&#xff0c;此外&#xff0c;研究人员还总结了AI绕不过去的七大弱点。2021 年&#xff0c…

2. 3物理层设备

2. 3物理层设备 文章目录2. 3物理层设备中继器2.集线器(多口中继器)中继器 2.集线器(多口中继器)

谁是深度学习框架一哥?2022 年,PyTorch 和 TensorFlow 再争霸

来源&#xff1a;机器学习研究组订阅用PyTorch还是TensorFlow&#xff0c;对于大部分深度学习从业者来说真是一个头疼的问题。最近Reddit上有个帖子从三个方面对比了两个框架&#xff0c;结果竟然是平手&#xff1f;你用PyTorch还是用TensorFlow&#xff1f;对于不同人群可能有…

【UOJ 48】最大矩形面积(修正版)

【题目描述】&#xff1a; 地面上从左到右并排紧挨着摆放多个矩形&#xff0c;已知这此矩形的底边宽度都为1&#xff0c;高度不完全相等。求在这些矩形包括的范围内能得到的面积最大的矩形&#xff0c;打印出该面积。所求矩形可以横跨多个矩形&#xff0c;但不能超出原有矩形所…

深度学习不可信?大脑建模先驱有话说

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮在过去的 20 年里&#xff0c;深度学习通过一系列有用的商业应用主导了人工智能的研究和应用。但在耀眼的背后是一些根深蒂固的问题&#xff0c;威胁着技术的提升。例如&#xff0c;典型的深度学习程序无法在一项以上的任务上表…

python模块补充

collections模块 collections模块namedtupe方法。又称具名元组。 from collections import namedtuple point namedtuple(空间坐标, x y z) # x y z可以写成列表形式&#xff0c;元组等可迭代对象 res point(3, 4, 5) print(res) # 空间坐标(x3, y4, z5) print(poin…

《力学》课时二质点运动学(二)

视频链接 1.角位移/角速度/角加速度

ListObject 多条件去重

上一篇将到根据某一条件去重List<Object> 对象链表。本文章根据多条件去重List<Object>去重 1 private List<StaingMD0010> getSecondProductWork(List<StaingMD0010> list) {2 for (int i 0; i < list.size(); i) {3 for (int j 0; …

More than Moore的探索

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译&#xff1a;porsche众所周知&#xff0c;现代电子学于1947年12月16日在新泽西州 Murray Hill的贝尔实验室诞生&#xff0c;在那里物理学家Walter Brattain 首次成功使用一种临时制作的半…

用scikit-learn学习主成分分析(PCA)

在主成分分析&#xff08;PCA&#xff09;原理总结中&#xff0c;我们对主成分分析(以下简称PCA)的原理做了总结&#xff0c;下面我们就总结下如何使用scikit-learn工具来进行PCA降维。 一、scikit-learn PCA类介绍 在scikit-learn中&#xff0c;与PCA相关的类都在sklearn.deco…