vuex 模块还需要命名空间吗?

Posted

技术标签:

【中文标题】vuex 模块还需要命名空间吗?【英文标题】:Do vuex modules still require namespacing? 【发布时间】:2017-12-06 18:57:39 【问题描述】:

我已经建立了一个包含多个模块的相当大的 Vuex 项目。

https://vuex.vuejs.org/en/modules.html

要获取 getter 的示例,search 模块中的 getter 可以这样处理:

computed: 
    filters() 
        return this.$store.state.search.filters;
    

因为我需要通过引用属性链中的search 属性来访问模块的状态,我还需要命名我的模块吗?

文档说明如下:

默认情况下,模块内的动作、突变和吸气剂仍然是 在全局命名空间下注册 - 这允许多个模块 对相同的突变/动作类型做出反应。

https://vuex.vuejs.org/en/modules.html#namespacing

但是,如果模块在 store 中属于它自己的属性,这不是模块本身之间可能发生的唯一冲突,这可以通过文件的简单命名约定轻松避免?

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

但是,如果模块在 store 中属于它自己的属性,这不是模块本身之间可能发生的唯一冲突,这可以通过文件的简单命名约定轻松避免?

不,你误会了。状态本身具有适当的命名空间,但突变、动作和 getter 仍然在全局级别上收集,因此您可以例如分派一个 Action,来自不同模块的多个 Action 对其做出反应。

这是默认行为,但好消息是,可以选择命名空间突变、操作和 getter:“namespaced: true”。

记录在这里:https://vuex.vuejs.org/en/modules.html#

向下滚动到“命名空间”部分。

【讨论】:

感谢您的解释,这已经很清楚了。

以上是关于vuex 模块还需要命名空间吗?的主要内容,如果未能解决你的问题,请参考以下文章

Vuex模块:开启命名空间

Vuex,命名空间的模块获取器在根获取器中不可用?

vuex中模块的命名空间到底是啥

如何为 vuex 命名空间模块状态创建 getter 和 setter

vuex中module的命名空间概念

如何在模块命名空间中使用 Vuex 类型常量?