Как разбить мой файл vuex?

У меня есть файл vuex с растущей массой мутаторов, но я не уверен в правильном пути его разбивки на разные файлы.

Потому что у меня есть:

const store = new Vuex.Store({ vuex stuff }) а затем ниже моего основного объявления приложения Vue: const app = new Vue({ stuff })

Я рад работать с компонентами Vue, и у них их много, но это материал на верхнем уровне приложения, и я не уверен, как разбить его. Любые советы приветствуются.

Ответ 1

Для тех, кто хотел бы разбить файл Vuex, не создавая более сложную модульную структуру приложения, я думаю, что также возможно просто разбить действия, мутации и геттеры на отдельные файлы, например:

└── src
     ├── assets
     ├── components
     └── store
           ├── store.js
           ├── actions.js
           ├── mutations.js
           └── getters.js

store.js

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

import actions from './actions';
import getters from './getters';
import mutations from './mutations';

Vue.use(Vuex);

export const store = new Vuex.Store({
  state: {
    someObj: {},
  },
  actions,
  getters,
  mutations,
});

actions.js

const actionOne = (context) => {
  ...
  context.commit('PROP1_UPDATED', payload);
};

const actionTwo = (context) => {
  ...
  context.commit('PROP2_UPDATED', payload);
};

export default {
  actionOne,
  actionTwo,
};

mutations.js

const PROP1_UPDATED = (state, payload) => {
  state.someObj.prop1 = payload;
};

const PROP2_UPDATED = (state, payload) => {
  state.someObj.prop2 = payload;
};

export default {
  PROP1_UPDATED,
  PROP2_UPDATED,
};

getters.js

const prop1 = state => state.someObj.prop1;
const prop2 = state => state.someObj.prop2;

export default {
  prop1,
  prop2,
};

... тогда вы можете делать вещи из своих компонентов, как вам угодно, используя обычный this.$store.dispatch('actionOne')...

Ответ 2

Вы можете разбить их на разные модули. Таким образом, вы можете хранить все связанные мутации, геттеры, состояния и действия в отдельных файлах. Документация объясняет это лучше, чем я могу: https://vuex.vuejs.org/en/modules.html

Ответ 3

В дополнение к @bigsee точному ответу, если для экспорта модуля используется файл index.js:

└── src
    ├── assets
    ├── components
    └── store
          └─ mymodule
              ├── state.js
              ├── actions.js
              ├── mutations.js
              ├── getters.js
              └── index.js

index.js

import state from './state'
import * as getters from './getters'
import * as mutations from './mutations'
import * as actions from './actions'

export default {

  state,
  getters,
  mutations,
  actions
}

getters.js

const getData = state => state.data

export {
  getData
}

Аналогично действиям, мутациям и файлам состояния.