将 Vuex 模块拆分为同一命名空间中的多个文件
Splitting Vuex module into multiple files in the same namespace
我正在尝试将我的 Vuex 模块拆分成块。除了创建多个命名空间模块(namespaced: true
)之外,我还想扩展变得非常长的全局模块。似乎在某些情况下,最好将我的一些 actions/mutations 保留在全局模块中,因为它们相互通信并且过于耦合,但是每次我需要执行时都使用 { root: true }
选项在我看来,一个动作或突变感觉不够好。因此,就我而言,不将 namespaced
设置为 true
听起来是完美的解决方案。
但是...
首先 - 似乎非命名空间模块无法容纳自己的 state
。
此外 - 当他们尝试使用传递给 actions/mutations 的 state
时,他们失败了,因为他们无法直接与根状态通信(仅使用 rootState
参数,这不是我想要的期待)。
我能想到的另一种可能的解决方案是像这样初始化我的 Vuex 存储:
export default new Vuex.Store({
namespaced: true,
state: {},
getters: {},
mutations: {},
actions: {
...actionsFromFile1,
...actionsFromFile2
}
});
但这个解决方案似乎还不是最好的。我还缺少其他解决方案吗?
你应该在你的模块中保留你的动作和突变。
正如您提到的,您可以使用 root
来分派其他模块的操作。
为什么要使用它,很简单。可见性 - 如果您需要从另一个商店分派一个动作,请将其保存在您期望的模块中,将代码拆分到您的全局商店和模块中将使跟踪事情的来源变得困难。
您的全球商店也会增长,您以后将很难找到想要的东西。
简单示例:
// message.js
const actions = {
add({ dispatch }, message) {
dispatch("chat/initializeChat", {}, { root: true });
// add message or something
},
};
您可以为单独的模块使用单独的文件:https://vuex.vuejs.org/guide/structure.html
我正在尝试将我的 Vuex 模块拆分成块。除了创建多个命名空间模块(namespaced: true
)之外,我还想扩展变得非常长的全局模块。似乎在某些情况下,最好将我的一些 actions/mutations 保留在全局模块中,因为它们相互通信并且过于耦合,但是每次我需要执行时都使用 { root: true }
选项在我看来,一个动作或突变感觉不够好。因此,就我而言,不将 namespaced
设置为 true
听起来是完美的解决方案。
但是...
首先 - 似乎非命名空间模块无法容纳自己的 state
。
此外 - 当他们尝试使用传递给 actions/mutations 的 state
时,他们失败了,因为他们无法直接与根状态通信(仅使用 rootState
参数,这不是我想要的期待)。
我能想到的另一种可能的解决方案是像这样初始化我的 Vuex 存储:
export default new Vuex.Store({
namespaced: true,
state: {},
getters: {},
mutations: {},
actions: {
...actionsFromFile1,
...actionsFromFile2
}
});
但这个解决方案似乎还不是最好的。我还缺少其他解决方案吗?
你应该在你的模块中保留你的动作和突变。
正如您提到的,您可以使用 root
来分派其他模块的操作。
为什么要使用它,很简单。可见性 - 如果您需要从另一个商店分派一个动作,请将其保存在您期望的模块中,将代码拆分到您的全局商店和模块中将使跟踪事情的来源变得困难。
您的全球商店也会增长,您以后将很难找到想要的东西。
简单示例:
// message.js
const actions = {
add({ dispatch }, message) {
dispatch("chat/initializeChat", {}, { root: true });
// add message or something
},
};
您可以为单独的模块使用单独的文件:https://vuex.vuejs.org/guide/structure.html