千锋教育-做有情怀、有良心、有品质的职业教育机构
- mutations和actions分别是做什么的? mutations和action都是用来改变Vuex store的状态的;
mutations提供的回调函数是同步的;而actions提供的方法是异步的,此外,actions的方法最终还是通过调用mutations的方法来实现修改vuex的状态的。
- 为什么不能用mutations处理异步数据? 官方文档说明:“在 mutation 中混合异步调用会导致你的程序很难调试。
例如,当你能调用了两个包含异步回调的 mutation 来改变状态,你怎么知道什么时候回调和哪个先回调呢?这就是为什么我们要区分这两个概念。在 Vuex 中,我们将全部的改变都用同步方式实现。
我们将全部的异步操作都放在Actions中。” actions 和mutations并不是为了解决竞态问题,而是为了能用devtools追踪状态变化。事实上在vuex里面actions只是一个架构性的概念,并不是必须的,说到底只是一个函数,你在里面想干嘛都可以,只要最后触发 mutation 就行。
异步竞态怎么处理那是用户自己的事情。vuex 真正限制你的只有 mutation 必须是同步的这一点(在 redux 里面就好像 reducer 必须同步返回下一个状态一样)。
同步的意义在于这样每一个mutation执行完成后都可以对应到一个新的状态(和 reducer 一样),这样 devtools就可以打个snapshot存下来,然后就可以随便 time-travel了。
如果你开着devtool调用一个异步的action,你可以清楚地看到它所调用的 mutation是何时被记录下来的,并且可以立刻查看它们对应的状态。
其实我有个点子一直没时间做,那就是把记录下来的mutations做成类似rx-marble那样的时间线图,对于理解应用的异步状态变化很有帮助。
下一篇
写出路由传参的具体实现相关推荐