跳到主要内容

为什么 Vuex 的 mutation 中不能做异步操作?

参考答案:

Vuex 中的 mutation 被设计为同步函数,这是由 Vuex 的设计理念决定的。Vuex 是一个专门为 Vue.js 设计的状态管理库,它旨在通过集中存储和管理应用的所有组件的状态,使得状态的变化变得可预测和可追踪。

以下是为什么 Vuex 的 mutation 中不能做异步操作的原因:

  1. 可预测性:Vuex 的设计理念强调状态的改变应该是可预测的。当 mutation 被触发时,状态会立即改变。如果 mutation 中包含异步操作,那么状态改变的时间点就会变得不确定,这就破坏了 Vuex 的可预测性。
  2. 视图与状态的同步:Vue 的响应式系统依赖于状态的同步更新。当状态发生变化时,视图会立即更新。如果 mutation 中包含异步操作,那么状态的变化可能会延迟,导致视图和状态之间的同步出现问题。
  3. 调试和测试:如果 mutation 中包含异步操作,那么在调试和测试应用时可能会遇到困难。由于异步操作的非确定性,可能很难重现和预测问题的行为。

因此,Vuex 推荐在 action 中进行异步操作。Action 类似于 mutation,但是它允许你执行异步操作。当异步操作完成后,你可以通过提交一个 mutation 来改变状态。这样,状态的改变仍然保持同步和可预测,同时允许你在 Vuex 中执行异步操作。