Vuex: использование модулей при сохранении того, что находится в базовом хранилище

#vuejs2 #vuex

#vuejs2 #vuex

Вопрос:

Я начал использовать Vuex и, поскольку в store.js нем стало тесно, добавил модули.
Состояние и средства получения моих модулей выглядят нормально в Vue Tools, когда я проверяю хранилище Vuex, но все средства получения и состояния базового хранилища являются такими undefined , и я, похоже, не могу сказать почему. Я импортирую базовое хранилище как import store from '../store/store' в app.js файле. Есть идеи о том, что я здесь делаю не так?

мое базовое хранилище выглядит следующим образом:

store.js

 import Vuex from 'vuex';
import Vue from 'vue';
import axios from "axios";
import { users } from './users-store';

Vue.use(Vuex);

const initialState = () => ({
    state: {
        letters: null,
        names: false,
    },
});

const state = initialState();

const getters = {
    getLetters(state) {
        return state.letters;
    },
    getNames(state) {
        return state.names;
    },
    
};

const mutations = {
    setLetters: (state,payload) => {
        state.letters = payload;
    },
    setNames: (state,payload) => {
        state.names = payload;
    },
};

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters,
    modules: {
        users
    },
});
  

users-store.js

 import Vuex from 'vuex';
import Vue from 'vue';

Vue.use(Vuex);

const initialState = () => ({
    userName: null,
    userAge: 50
});

const state = initialState();

const mutations = {
    setUserName: (state,payload) => {
        state.userName = payload;
    },
    setUserAge: (state,payload) => {
        state.userAge = payload;
    },

};

const getters = {
    getUserName(state) {
        return state.userName;
    },
    getUserAge(state) {
        return state.userAge;
    },
};


export const users = {
    namespaced: true,
    state,
    mutations,
    getters,
    actions,
};
  

Ответ №1:

Обычно я делаю это точно так же, как в документах для модульного хранилища:

Пожалуйста, обратите внимание на комментарии

store/index.js :

 import Vue from 'vue'
import Vuex from 'Vuex'
import ModuleA from './modules/module-a.js'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {}, // with object, not a function returning object
  getters: {},
  mutations: {},
  actions: {},
  modules: {
    ModuleA,
  },
})

export default store
  

store/modules/module-a.js :

 const ModuleA = {
  state: () => ({}), // a function for this one
  getters: {},
  mutations: {},
  actions: {}
}

export default ModuleA // and I use default export instead of named export
  

И это отлично работает.

Обратите внимание, что для этого я использую последние версии Vue и Vuex.