Vuex unregisterModule是做什么的?

Rob*_*Rob 6 vue.js vue-router vuex vuejs2 vuex-modules

我对unregisterModule实际操作有些困惑。

如果我们有这样的模块:

{
    state: {
        page: 1
    }
}
Run Code Online (Sandbox Code Playgroud)

然后动态取消/注册:

beforeCreate() {        
    this.$store.registerModule('items', store);
},

beforeDestroy() {
    this.$store.unregisterModule('items');
},
Run Code Online (Sandbox Code Playgroud)

如果我们更改page导航方式(触发unregister),则向后导航。

似乎状态仍然存在?我认为unregister完全杀死了该模块以及所有数据,状态等?

我可以使状态成为这样的函数:

{
    state() {
        return {
            page: 1
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,那它仍然不会改变问题,那unregisterModule实际上是什么呢?

这是否也意味着我要么必须将所有状态对象都更改为函数,要么在注销时使用某种重置方法。这似乎毫无意义,我在这里想念什么?

rol*_*oli 6

unregisterModule删除模块,您无法访问它。

状态不会持续存在,但您必须将状态用作函数

从文档:

如果我们使用一个普通对象来声明模块的状态,那么该状态对象将通过引用共享并在它发生变异时导致跨存储/模块状态污染。

这实际上与 Vue 组件内部的数据完全相同。所以解决方案也是一样的——使用一个函数来声明模块状态

在 codeandbox 上实时查看

  • 在首页(模块注册),增加计数器
  • 在关于页面(模块未注册)
  • 在联系页面我们重新注册模块。
  • 观察计数器未持久化。

  • 我想问题是,不让模块可访问有什么好处? (2认同)