说明

  • 既然我们可以取出数据,就可以修改数据,而修改数据并不是像修改data的数据一样,直接 this.xxx = xxx,这样有一个问题,在实际开发中,state的数据一般会多个组件共享,如果可以使用直接赋值的方式修改stste数据的值,一旦出现问题,就很难查找,很难查找到底是哪个组件修改出现的问题,因此Mutation就出现了。它就相当于一个管理员,一旦组件想修改state数据,就以提交的方式来修改,告诉该管理员,让它去帮你修改,这样做有一个好处,一旦出现了问题,就找该管理员就行。并不需要一个一个组件去排查。

基本使用

  • 它的用法也非常简单,它就相当于组件的methods,里面即为一个个方法,定义这些方法去帮我们修改相应的数据,请看下面一个简单例子

    • 在state定义了一个msg,matutions定义了一个changeMsg函数用于修改msg,该方法组件可以通过this.$store.commit('changeMsg')来调用,在组件App中点击按钮就会调用该方法实现修改msg的功能
  //vuex
var store = new Vuex.Store({
state:{
msg: 'Vuex好容易'
},
mutations:{
changeMsg(state,){
state.msg = '太容易了吧'
}
}
})
//App组件
<template>
<div id="wrap">
<h1>{{msg}}</h1>
<button @click="$store.commit('changeMsg')">点击修改</button>
</div>
</template>
  • 参数

    • 它只能传入两个参数,第一个默认为state对象,第二个即为我们传入的参数,一般我们传入最多的是一个对象。对象能够传递的数据比较多。一般我在写vue项目的时候,一般会先定义一个 setState函数,函数内部可以根据传入的数据,调用一次可以修改多个state数据。
var store = new Vuex.Store({
state:{
msg: 'Vuex好容易',
count: 1,
flag: false
},
mutations:{
//遍历传入的data对象,根据传入的值修改相应的state数据
setState(state, data){
for(let item in data){
state[item] = data[item]
}
}
}
})
//App组件
<template>
<div id="wrap">
<h1>{{msg}}</h1>
<button @click="$store.commit('setState', {
msg: '好难呀',
count: 10,
flag: true
})">点击修改</button> //以对象的形式提交数据 type即为Matutions相应的函数
<button @click="$store.commit({
type: 'setState',
msg: '好难呀',
count: 10,
flag: true
})">点击修改</button>
</div>
</template>
  • 遵循vue规则

  • 使用常量替代 Mutation 事件类型

  • Mutation 必须是同步函数

    • 这些就不必写太多,建议看文档Matutions
  • 注意

    • Matutions只能是同步的函数,不能进行异步操作,异步操作使用 Action。

vuex之Mutation(三)的更多相关文章

  1. Vuex基础-Mutation

    借助官网的一张图,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.不可以直接对其进行赋值改变.需要注意的是,mutations只能做一些同步的操作. ​​​ 代码结构: ​ ...

  2. Vuex之Mutation

    [前言] 数据在页面是获取到了,但是如果需要修改count值怎么办?更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 ...

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

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

  4. vuex中mutation和action的详细区别

    const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } ...

  5. 【vuex】mutation和action的区别

    const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } ...

  6. vuex——action,mutation,getters的调用

    一.子模块调用根模块的方法 mutation调用  context.commit('clearloginInfo',{key_root:data},{root:true}); action调用  co ...

  7. 06-vue项目02:vuex、Mutation、Action、ElementUI、axios

    1.Vuex 1.为什么使用VueX data从最上面的组件,一层层往下传值,一层层的验证 Vue单向数据流 “中央空调“,代理 VueX 解决数据 传值.. 2.Vuex介绍与安装 (1)Vuex官 ...

  8. vuex 源码解析(四) mutation 详解

    mutation是更改Vuex的store中的状态的唯一方法,mutation类似于事件注册,每个mutation都可以带两个参数,如下: state ;当前命名空间对应的state payload ...

  9. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单

    前言 哈喽大家周五好,马上又是一个周末了,下周就是中秋了,下下周就是国庆啦,这里先祝福大家一个比一个假日嗨皮啦~~转眼我们的专题已经写了第 23 篇了,好几次都坚持不下去想要中断,不过每当看到群里的交 ...

随机推荐

  1. 7.13 Python基础语法

    Python基础语法 编码: 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码 python2.7中有两个函数 ...

  2. 洛谷$P$4137 $Rmq\ Problem / mex$ 主席树

    正解:主席树 解题报告: 传送门$QwQ$ 本来以为是道入门无脑板子题,,,然后康了眼数据范围发现并没有我想像的那么简单昂$kk$ 这时候看到$n$的范围不大,显然考虑离散化?但是又感觉似乎布星?因为 ...

  3. teamviewer早期版本下载链接

    https://www.teamviewer.cn/cn/download/previous-versions/

  4. 「Luogu」[JSOI2007]字符加密 解题报告

    题面 思路: 作为一个后缀数组的初学者,当然首先想到的是后缀数组 把\(s\)这个串首尾相接,扩展为原来的两倍,就能按后缀数组的方法处理 证明: 神仙一眼就看出这是后缀的裸题,我这个蒟蒻想了半天想不出 ...

  5. 在Git的PR(Pull Request)提示冲突无法merge合并的解决方案

    问题 假设有一个分支A,向master分支提交PR,然后发生无法自动解决的冲突,PR提示不能执行merge合并. 解决方案1 本地checkout检出并切换到A分支,pull拉取更新到最新代码 在本地 ...

  6. 配置本地目录作为yum端

    ---恢复内容开始--- 最近在配置gnome-session中发现需要太多依赖的包,又由于实验室使用的是局域网,没有办法连接网络,所以想着配置本地yum安装.在网上找了一些资料,经过整理,把自己这次 ...

  7. Time、Date拼接成TimeStamp

    Time.Date拼接成TimeStamp 有关于Time类型.Date类型的数据这里不再赘述,本文旨在讲解如何将数据库中的Time.Date类型取出来并转换成TimeStamp类型,话不多说,先看代 ...

  8. c++ beep 演奏一次质量不高的天空之城

    beep函数用法: beep(HZ,time); hz是发出多少赫兹声音,time是发声时间(ms) 话不多说,上代码 #include <cstdio> #include <win ...

  9. 曹工说Spring Boot源码(9)-- Spring解析xml文件,到底从中得到了什么(context命名空间上)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  10. Java 进程占用内存过多,幕后元凶原来是线程太多

    那天中午吃饭,一个同事说,那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了. 简直想笑. 背景说明 我们当前这个系统和 ...