引用:
- Pinia:pinia.vuejs.org/
- Vuex:v3.vuex.vuejs.org/zh/
官方解释:
最初的 vuex 在设计的时候,是通过 state 表示数据,通过 mutation 修改数据,通过 action 处理异步。
必须要使用 mutation 修改数据的原因为了:所有的数据变化必须是有迹可循(在 VueDevTools 中可以被跟踪)的。以此为目标,如果直接修改了 state 则 VueDevTools 无法跟踪对应的变化。
而 mutation 仅支持同步的操作,原因也与此相关。如果 mutation 的操作变成了异步的,则在 VueDevTools 中呈现 mutation 时,数据可以尚未发生变化。这就会导致 VueDevTools 呈现不准确。
总结:之所以设计 mutation、action 的概念,本质上是为了可以在 VueDevTools 中监听数据变化。
pinia 取消了 mutation 的概念,原因就是因为:pinia 直接修改 state,在 VueDevTools 中依然可以监听到变化。所以,mutation 的存在就没有必要了。
而 action 的作用也发生了变化。它在 pinia 中表示一个 store 的内部逻辑执行函数。可以是同步的,也可以是异步的。