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 选中文字并响应获取的实现代码
Aug 28 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
Dec 01 Javascript
JavaScript函数获取事件源的小例子
May 14 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
Jun 30 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
Sep 17 Javascript
JS+CSS实现网页加载中的动画效果
Oct 27 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
Mar 05 Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
May 29 jQuery
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
php常用的工具开发整理
2019/09/26 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
python学习数据结构实例代码
2015/05/11 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
python3 实现调用串口功能
2019/12/26 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
python高级特性简介
2020/08/13 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
办公室年终个人自我评价
2013/10/28 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
酒后驾车标语
2014/06/30 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python