如何将 2 个 vuex 商店合并为一个商店

Posted

技术标签:

【中文标题】如何将 2 个 vuex 商店合并为一个商店【英文标题】:How to combine 2 vuex stores into a single store 【发布时间】:2022-01-03 22:01:32 【问题描述】:

您好,我需要将 2 个 vuex 商店合并为一个商店(两个商店属于不同的项目

import storeA from '/path';

import storeB from '/path';

现在合并了两个商店

const combinedStore = //combine logic as i don't know this logic

我在***上搜索了很多以结合2个vuex商店,但我没有找到任何发布的解决方案。

这是我的vuex 商店在stores 中的样子

商店 1:

   // storeA.js
    
    const store = 
        state()return ,
        actions: async getData()...,
        mutations: ,
        getters: , 
        modules: 
           Login
        
    

商店 2:

   // storeB.js
    
    const store = 
        state()return ,
        actions: async getUsers()...,
        mutations: ,
        getters: , 
        modules: 
           workflow
        
    

这是我的尝试:

import StoreA from 'storeA.js';
import StoreB from 'storeB.js';

const newStoreData = Object.assign(,StoreA,StoreB)

const newStore = new Vuex.Store(
    ...newStoreData
);

现在只有 1 个商店可以工作,其他商店会抛出类似的错误

读取未定义的名字(即state.[module].first_name

问题可以在这里重现:https://codesandbox.io/s/vuex-playground-forked-1h344?file=/src/main.js

原始工作分叉: https://codesandbox.io/s/k012qvkmnv?file=/src/main.js

【问题讨论】:

你不能合并两个上下文错误的存储,但是你可以合并两个模块,其中每个模块可以有自己的状态、getter、突变和动作。 在此示例中创建了 2 个单独的商店,这正在重现我的问题 codesandbox.io/s/vuex-playground-forked-1h344?file=/src/App.vue 此处的原始工作代码 codesandbox.io/s/k012qvkmnv 【参考方案1】:

Vue 3+

情人版大概也有这种方法,但我不确定。

import StoreA from 'storeA.js';
import StoreB from 'storeB.js';

const newStore = new Vuex.Store(storeA);

newStore.registerModule('', storeB)

我刚刚修改了store2.jsmain.js文件

已解决问题的链接:https://codesandbox.io/s/vuex-playground-forked-6pg4w?file=/src/main.js

这是一个关于它的文档:https://vuex.vuejs.org/guide/modules.html#dynamic-module-registration

【讨论】:

得到 错误 Uncaught TypeError: Object(...) is not a function 尽管按照您的步骤操作 @EaB 你在使用 vuex 4+ 吗? ...@Mises 我正在使用"vuex": "^3.6.0" @EaB 为版本 3.x 编辑 ...@Mises 这种组合我已经知道的 2 个模块的方法。如果我已经为每个插件提供了专用模块,则此解决方案不灵活。在核心方面,我们需要再次定义模块。然后更改插件中的整个代码(像这样访问store.state.a)。如果我们记住我的插件可以在任何地方使用,这不是灵活的解决方案。

以上是关于如何将 2 个 vuex 商店合并为一个商店的主要内容,如果未能解决你的问题,请参考以下文章

如何清除 vuex 商店中的状态?

如何将我的 App.vue 页面添加到 Vuex 商店?

VueX:如何使用嵌套对象构建我的商店

如何在 Vue 2 Vuex 商店中使用 $route?

如何在火花中合并两个不同的数据帧? [复制]

应用商店安装流程