mutation与vuex区别
如果点击按钮不是直接改变store中的状态,而是完成其他操作后再来改变,这时候会出现一个问题。
/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
let store = new Vuex.Store({
state:{ //应用中需要的状态数据
count:100
},
mutations:{//不能直接改变state中的状态,唯一途径显示的提交mutations
addNum(state,n){
setTimeout(()=>{ //模拟异步操作
state.count +=n
},1000)
},
minusNum(state,payload){
state.count -= payload.min
}
}
})
export default store
初始化状态

慢慢点击+按钮,观察页面中的数字和控制台中的数字。

快速点击+按钮,观察页面中的数字和控制台中的数字。

两个不同点击方式有一个共同的现象:页面中数字跟控制台数字没有统一。当点击一下+按钮就通过 mutation 改变状态,在vuex中有一个原则:在提交mutation的时候必须是同步的。
当一提交mutation,控制台Base State中必定有一条记录,不做异步操作。但是要包含异步操作的话,需要使用 action。
Action:包含异步操作、提交mutation改变状态。
修改后/store/index.js
在actions中通过 context.commit('addNum',{}) 来提交mutation
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
let store = new Vuex.Store({
state:{ //应用中需要的状态数据
count:100
},
mutations:{//不能直接改变state中的状态,唯一途径显示的提交mutations
addNum(state,payload){
state.count +=payload.n
},
minusNum(state,payload){
state.count -= payload.min
}
},
actions:{
addAction(context){//参数:对象,不是当前的store实例
setTimeout(()=>{ //模拟异步操作
//改变状态,必须提交mutation
context.commit('addNum',{n:3})
},1000)
}
}
})
export default store
修改后 /src/components/Increment.vue
通过 this.$store.dispatch('addAction') 来触发一个action
<template>
<div>
<h2>加减</h2>
<button @click="addHandle">+</button>
<span>{{num}}</span>
<button @click="minusHandle">-</button>
</div>
</template>
<script>
export default{
computed:{
num(){
return this.$store.state.count
}
},
methods:{
addHandle(){
//改变状态,只需提交mutation中的addNum
//this.$store.commit('addNum',3)
//触发一个action
this.$store.dispatch('addAction')
},
minusHandle(){
this.$store.commit({
type:'minusNum',
min:5
})
}
}
}
</script>
与本文action相关的文章(必看):http://menvscode.com/detail/5a353b05a7833e528ca883de
- 喜欢 (0)
- 收藏 (0)

阅读排行榜
- vue组件级路由钩子函数(beforeRouteEnter/beforeRouteUpdate/beforeRouteLeave)
- vue路由中设置滚动行为(scrollBehavior)
- 解决Do not use built-in or reserved HTML elements as component id: Header问题
- vue笔记之methods中函数固定参数$event/事件方法
- vue中transition动态设置name属性左右切换
- vue笔记之v-if/v-show/绑定事件
- vue路由中动态路径参数/监控$route路由信息对象
- vue利用tween.js使页面进行滚动效果
- vue路由(vue-router)hash和history模式
- vue中slot插槽功能
本站在建设中引用了因特网上的一些资源并对有明确来源的注明了出处,版权归原作者及网站所有;
如果您对本站文章版权的归属存有异议,请您联系站长:third_king$163.com(将$换成@),我们会马上做出整改。
Copyright © menvscode.com All Rights Reserved. 浙ICP备16010139号-3

mutation与vuex区别的更多相关文章
- vuex知识笔记,及与localStorage和sessionStorage的区别
菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...
- vuex 基本入门和使用(三)-关于 mutation
vuex 基本入门和使用(三)-关于 mutation vuex 版本为^2.3.1,按照我自己的理解来整理vuex. 关于 mutation 这里应该很好理解. 更改 Vuex 的 store 中的 ...
- Vuex之Mutation
[前言] 数据在页面是获取到了,但是如果需要修改count值怎么办?更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 ...
- [Vuex系列] - Mutation的具体用法
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 ...
- 挑战全网最幽默的Vuex系列教程:第三讲 Vuex旗下的Mutation
写在前面 上一讲「Vuex 旗下的 State 和 Getter」,告诉了我们怎么去使用仓库 store 中的状态数据.当然,光会用肯定还不够,大部分的应用场景还得对这些状态进行操控,那么具体如何操控 ...
- 初识vuex
1.简介 vuex是 vue官方推荐的一个状态管理器.当我们遇到很多状态改变时,组件之间的通信就会变得复杂,这时候vuex的强大就展现出来. 我们从vuex的原理以及vuex的api两个部分介绍vue ...
- Vue-认识状态管理vuex
vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试,可以多个组件共享状态.简单来说,就是共享的状态用state来存放,用mutations来操作state,但是 ...
- vuex - 学习日记
一.简单理解 简单说vuex,就是用来管理组件状态的数据,并且能在你可掌控的范围下增删改查这些数据. store容器 , state状态 二者关系(包含): 以前我也把vuex里边的state看成是一 ...
- day 87 Vue学习六之axios、vuex、脚手架中组件传值
本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的使用 Axios 是一个基于 promise 的 HT ...
随机推荐
- Full scan vs index 执行计划的实验
根据Oracle-L邮件列表里主题「 Full scan vs index 」的讨论而来. 1.测试环境创建 SYS@HEMESRHTDB2(1.206)> select * from v$ve ...
- 【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)
点此看题面 大致题意: 给出一个长度为\(n\)的数列\(a\)和一个长度为\(m\)的数列\(b\),求\(a\)有多少个长度为\(m\)的子串与\(b\)匹配.数列匹配指存在一种方案使两个数列中的 ...
- nginx安装和基础代理配置
mac上执行 npm install nginx 安装好后运行nginx sudo nginx 一般mac下nginx会安装在 /usr/local/etc/nginx 下 里面的nginx.conf ...
- luogu P2124 奶牛美容
嘟嘟嘟 首先数据范围那么小,那么算法也是相当暴力的. 对于一个点(x, y)所属的联通块,预处理出从这个点出发到这个块外的所有点的曼哈顿距离.复杂度O(n4). 然后求答案:最少答案不一定是三个联通块 ...
- Node.js使用MySQL数据库中对RowDataPacket对象的使用
使用Node.js开发使用MySQL数据库的网站,在查询后返回一RowDataPacket类型的对象 原先使用toString()方法一直得到仅为object的字符串,无法使用 后思考,才发现忽略了其 ...
- NYOJ298 点的变换 【矩阵乘法经典】
任意门:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=298 点的变换 时间限制:2000 ms | 内存限制:65535 KB 难度:5 ...
- Very Deep Convolutional Networks for Large-scale Image Recognition(vggnet)
vggNet是从AlexNet而来,主要探索卷积神经网络的深度与性能之间的关系,通过反复堆叠3x3的卷积核(c中有1x1的卷积核,也只有c中有,c是16层)和2x2的最大池化层,vggNet构筑了16 ...
- 创建properties文件保存在WEB项目的classes文件下
1.保存数据 private synchronized boolean saveFile(String url,String filename){ try { String path = servle ...
- 任务学习-ucos
1.任务(task)也称作一个线程: 2.一个任务有5种状态:休眠,就绪,运行,挂起,被中断 休眠:任务驻留在程序空间中,还没有交给ucos管理,把任务交给ucos 是通过调用OSTaskCreate ...
- SpringBoot非官方教程 | 第二十篇: 处理表单提交
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-form/ 本文出自方志朋的博客 这篇文件主要介 ...