store的用途主要是用于在SPA等场景中去做全局的状态管理,那其实有人会问,为什么不直接用windows呢,这不就是全局状态吗?
我个人觉得可以从两个方面展开:
- Vue的响应式机制
- 可维护性与debug
Vue 响应式机制 #
Vue本身是一个响应式框架,当我们的状态发生变化时,需要去同步更新视图。如果用windows,则无法直接办到。
当然,我们可以通过 difineProperty/Proxy 来实现,但是这样做的话:
- 没有命名空间,仍然容易因为命名冲突而导致问题
- 无法做到状态切换路径的跟踪与调试
可维护性与debug #
刚刚也说过了,windows一是无法做到模块隔离,二是无法做到状态切换路径的跟踪与调试。所以需要单独的某个能力来解决,也就有了 vuex 和 pinia。它们提供了以下能力:
- 模块隔离:可以将状态分成多个模块,每个模块都有自己的 state、getter、action,避免命名冲突。
- 状态切换路径的跟踪与调试:通过兼容 vuex/pinia 的 devtools 插件,可以方便地查看状态的变化路径,方便调试。即
- 我在哪里被变更了
- 变更前是什么值
- 变更后是什么值