vuex 和 pinia 的区别,为什么要设计 Pinia

140 阅读1分钟

引用:

官方解释:

image.png

最初的 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 的内部逻辑执行函数。可以是同步的,也可以是异步的。