Vuex中mutations与actions的区别详解


Posted in Javascript onMarch 01, 2018

区分 actions 和 mutations 并不是为了解决竞态问题,而是为了能用 devtools 追踪状态变化。

事实上在 vuex 里面 actions 只是一个架构性的概念,并不是必须的,说到底只是一个函数,你在里面想干嘛都可以,只要最后触发 mutation 就行。异步竞态怎么处理那是用户自己的事情。

vuex 真正限制你的只有 mutation 必须是同步的这一点(在 redux 里面就好像 reducer 必须同步返回下一个状态一样)。同步的意义在于这样每一个 mutation 执行完成后都可以对应到一个新的状态(和 reducer 一样),这样 devtools 就可以打个 snapshot 存下来,然后就可以随便 time-travel 了。如果你开着 devtool 调用一个异步的 action,你可以清楚地看到它所调用的 mutation 是何时被记录下来的,并且可以立刻查看它们对应的状态。

亲测:如果在mutation中做了异步操作,在dev-tools中会立即打印一个snapshot,而此时异步操作还没有执行完,此时的snapshot的信息是错误的。

而在action中做异步操作dev-tools会等等异步操作执行完才去打印mutation的一个snapshot,这样便于我们回查time-travel,查看在某个mutation里的变化。

以上这篇Vuex中mutations与actions的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 Javascript
js判断日期时间有效性的方法
Oct 24 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
在Node.js中使用Javascript Generators详解
May 05 Javascript
完美的js图片轮换效果
Feb 05 Javascript
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
Feb 23 Javascript
vue2组件实现懒加载浅析
Mar 29 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
May 11 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 #Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 #Javascript
详解Immutable及 React 中实践
Mar 01 #Javascript
解决VUEX兼容IE上的报错问题
Mar 01 #Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 #Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 #Javascript
Node.js readline模块与util模块的使用
Mar 01 #Javascript
You might like
php 进度条实现代码
2009/03/10 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
关于jQuery中的end()使用方法
2011/07/10 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
js单例模式的两种方案
2013/10/22 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
在django中,关于session的通用设置方法
2019/08/06 Python
Python函数基本使用原理详解
2020/03/19 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
财务部会计岗位职责
2015/02/03 职场文书
初中政治教学工作总结
2015/08/13 职场文书