vuex中commit的作用

$store.commit('set_token', '122')
这个commit设计的作用是什么
直接调用函数不可以?
为了只有mutations才能修改state的值?

阅读 2.4k
3 个回答

所以大菠萝没有设计commit了 可以直接调action

我觉得不管是vuex的commit,还是redux的dispatch,都有一点“指令”的味道。

vuex和redux都基于树型结构(如果没有模块认为是集合也可以)保存和管理状态,就会产生所谓的状态转移,commit或是dispatch肯定就包含了一些这样的工作。如果查看vuex的控制台调试插件,你会发现有mutation序列,甚至还可以回退,这种应该都是基于状态转移来做的。

至于大菠萝没有commit,无责任猜测也是通过proxy做了调用的代理。

react有一款新型的状态管理工具recoil,基于原子做状态管理,有点儿类似全局的响应式数据,不过同样有snapshot这样的概念,基于某一时刻的各个原子的状态,重置整个应用的状态情况。

而且从mutation的结构上来说,第一个参数可以认为是旧的状态树,第二个参数是payload,如果手动调用,不考虑记录状态转移,也得考虑传参问题。

是不是只有mutation才能修改,我记得应该是,commit里完全可以记一个状态,让state数据的setter变为可设置,我感觉这也是为啥mutation必须是同步的,不然就存在状态无法重置,出现随便修改的情况。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题