1️⃣ Module

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:
在公共的 store 中设置 modules 就可以使用模块 store 了

1️⃣ 命名空间

默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的——这样使得多个模块能够对同一 mutation 或 action 作出响应。
如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块。当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。例如:

  1. 1. 注意:开启命名控件后再组件中获取或操作 vuex 时要加上模块的名称
  2. 1. 例如:`...mapState("oneOptions", ["one"])`

image.png
image.png

1️⃣ 严格模式

开启严格模式,仅需在创建 store 的时候传入 strict: true

  1. const store = new Vuex.Store({
  2. // ...
  3. strict: true
  4. })

在严格模式下,无论何时发生了状态变更且不是由 mutation 函数引起的,将会抛出错误。这能保证所有的状态变更都能被调试工具跟踪到。

2️⃣ 开发环境与发布环境

不要在发布环境下启用严格模式!严格模式会深度监测状态树来检测不合规的状态变更——请确保在发布环境下关闭严格模式,以避免性能损失。
类似于插件,我们可以让构建工具来处理这种情况:

  1. const store = new Vuex.Store({
  2. // ...
  3. strict: process.env.NODE_ENV !== 'production'
  4. })