美文网首页前端100问
【前端100问】Q37:为什么 Vuex 的 mutation

【前端100问】Q37:为什么 Vuex 的 mutation

作者: alanwhy | 来源:发表于2021-01-02 14:47 被阅读0次

写在前面

此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
为了备战 2021 春招
每天一题,督促自己
从多方面多角度总结答案,丰富知识
为什么 Vuex 的 mutation 和 Redux 的 reducer 中不能做异步操作
简书整合地址:前端 100 问

正文回答

因为异步操作是成功还是失败不可预测,什么时候进行异步操作也不可预测;当异步操作成功或失败时,如果不 commit(mutation) 或者 dispatch(action),Vuex 和 Redux 就不能捕获到异步的结果从而进行相应的操作

更改 state 的函数必须是纯函数,纯函数既是统一输入就会统一输出,没有任何副作用;如果是异步则会引入额外的副作用,导致更改后的 state 不可预测;

尤大的回答

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

事实上在 vuex 里面 actions 只是一个架构性的概念,并不是必须的,说到底只是一个函数,你在里面想干嘛都可以,只要最后触发 mutation 就行。

异步竞态怎么处理那是用户自己的事情。vuex 真正限制你的只有 mutation 必须是同步的这一点(在 redux 里面就好像 reducer 必须同步返回下一个状态一样)。

同步的意义在于这样每一个 mutation 执行完成后都可以对应到一个新的状态(和 reducer 一样),这样 devtools 就可以打个 snapshot 存下来,然后就可以随便 time-travel 了。

如果你开着 devtool 调用一个异步的 action,你可以清楚地看到它所调用的 mutation 是何时被记录下来的,并且可以立刻查看它们对应的状态。

其实我有个点子一直没时间做,那就是把记录下来的 mutations 做成类似 rx-marble 那样的时间线图,对于理解应用的异步状态变化很有帮助。

相关文章

  • 【前端100问】Q37:为什么 Vuex 的 mutation

    写在前面 此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我[https://github.co...

  • vuex Mutation

    Mutation 更改Vuex的store中的状态的唯一方法是提交mutation。Vuex中的mutation非...

  • Vuex使用介绍(二)

    Mutation Vuex 通过commit一个mutation来对state进行更改。每个 mutation 都...

  • vuex-Mutation

    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常...

  • vuex---核心概念Mutation

    Mutation 更改 Vuex 的 store 中状态的唯一方法是提交 mutation。Vuex 中的 mut...

  • vuex_Mutation_04

    Mutation 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mu...

  • Vuex--Mutation

    Mutation 更改Vuex的store中的状态的唯一方法就是提交mutation。Vuex 中的 mutati...

  • Vuex部分问题

    Vuex问题 1、提示 [vuex] unknown mutation type: 问题代码 //使用store....

  • 快速入门Vuex 魔法

    Vuex核心 Store State Mutation Action Module Vuex 的工作流程图 下面我...

  • Vuex教程全集 - 白话篇

    1、Vuex 到底是个什么鬼 2、Vuex旗下的State和Getter 3、Vuex旗下的Mutation 4、...

网友评论

    本文标题:【前端100问】Q37:为什么 Vuex 的 mutation

    本文链接:https://www.haomeiwen.com/subject/qeueoktx.html