Vuex 该什么时候上:不是所有共享状态都值得进 store

0 阅读

一提到 Vue 项目里的状态管理,很多人很快就会想到 Vuex。

这没问题。Vuex 在合适的场景下确实很有用,尤其是多组件共享、跨页面复用、状态流比较长的时候。

问题在于,Vuex 也特别容易被提早引入。

什么情况适合用 Vuex

如果一个状态同时满足下面几个条件,通常就值得考虑 Vuex:

  • 多个组件都要读
  • 修改入口不只一个
  • 生命周期跨组件甚至跨页面
  • 你希望状态流清楚可追踪

比如:

  • 当前登录用户
  • 权限信息
  • 购物车
  • 全局筛选条件

这些都比较适合放进 store。

什么情况不适合

如果只是一个页面里的弹窗开关、输入框内容、临时切换状态,这类局部交互通常没有必要上 Vuex。

不是说不能放,而是放进去之后成本会比收益高。

很多时候你会发现:

  • mutation 要写
  • action 要写
  • getter 要写
  • 最后只是改一个布尔值

这时大概率是建模层级抬高了。

Vuex 最有价值的地方是“明确”

很多人喜欢 Vuex,不只是因为它能共享状态,而是因为它把状态改动路径写得很明确。

你能知道:

  • 状态在哪里
  • 谁在改它
  • 通过什么动作改

这种明确感在多人协作时尤其重要。

但别把所有状态都追求成“全局”

Vuex 的一个常见误用,就是把“会被复用”误解成“应该全局”。

有些数据确实有机会在别处再用,但如果眼下仍然只是一个局部页面的交互状态,就不一定要提前进 store。

越早全局化,后面越容易产生多余耦合。

module 拆分要早点做

项目稍大一些以后,store 最怕变成一个大对象,里面把用户、订单、设置、弹窗、缓存全揉在一起。

这时候最容易出现的问题不是功能失效,而是后面没人愿意动它。

所以模块拆分应该尽早做,不要等 store 已经长得很胖了再回头治理。

写在最后

Vuex 不该被神化,也不该被滥用。

它适合那些真正跨组件、跨页面、需要清晰流转的状态;至于局部交互,很多时候交给组件自己反而更自然。状态管理做得好不好,关键不是上没上 Vuex,而是状态层级是不是放对了。