#vue.js #vuex #vuejs3
Вопрос:
Привет у меня есть требование объединить 2 vuex
магазина в один магазин (оба магазина разных проектов)
import storeA from '/path';
import storeB from '/path';
теперь объединил оба магазина
const combinedStore = //combine logic as i don't know this logic
Я много искал в stackoverflow, чтобы объединить 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 магазин, другой выдаст ошибку, такую как
чтение имени пользователя имя неопределенного (i,e
state.[module].first_name
)
Проблему можно воспроизвести заново here:https://codesandbox.io/s/vuex-playground-forked-1h344?file=/src/main.js
Оригинальная работа fork:https://codesandbox.io/s/k012qvkmnv?file=/src/main.js
Комментарии:
2. в этом примере создано 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.js
и main.js
файлы
ссылка на решенную проблему: https://codesandbox.io/s/vuex-playground-forked-6pg4w?file=/src/main.js
Вот документация об этом: https://vuex.vuejs.org/guide/modules.html#dynamic-module-registration
Комментарии:
1.получение ошибки
Uncaught TypeError: Object(...) is not a function
, несмотря на выполнение ваших шагов2. @EaB Вы используете vuex 4 ?
3. …@Мизес, я использую
"vuex": "^3.6.0"
4. @EaB Отредактировано для версии 3.x
5. …@Mises этот подход к объединению 2 модулей я уже знаю. это решение не является гибким, если у меня уже есть выделенные модули для каждого плагина. в основной части снова нам нужно определить модуль. затем измените весь код в плагине (чтобы получить такой доступ
store.state.a
). не гибкое решение, если иметь в виду, что мой плагин можно использовать с любым местом.