ミューテーターの数が増えているvuexファイルがありますが、それを別のファイルに分割する正しい方法がわかりません。
私が持っているので:
const store = new Vuex.Store({ vuex stuff })
そしてその下に私のメインVueアプリ宣言:const app = new Vue({ stuff })
私はVueコンポーネントで作業してうれしいですが、すでに多くのコンポーネントを持っていますが、これはアプリのトップレベルのものであり、どのように分解するかわかりません。 。
より複雑なモジュラーアプリケーション構造を作成せずにVuexファイルを分割したい場合は、アクション、ミューテーション、ゲッターを次のように別々のファイルに分割することも可能だと思います。
_└── src
├── assets
├── components
└── store
├── store.js
├── actions.js
├── mutations.js
└── getters.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,
});
_
_const actionOne = (context) => {
...
context.commit('PROP1_UPDATED', payload);
};
const actionTwo = (context) => {
...
context.commit('PROP2_UPDATED', payload);
};
export default {
actionOne,
actionTwo,
};
_
_const PROP1_UPDATED = (state, payload) => {
state.someObj.prop1 = payload;
};
const PROP2_UPDATED = (state, payload) => {
state.someObj.prop2 = payload;
};
export default {
PROP1_UPDATED,
PROP2_UPDATED,
};
_
_const prop1 = state => state.someObj.prop1;
const prop2 = state => state.someObj.prop2;
export default {
prop1,
prop2,
};
_
...通常のthis.$store.dispatch('actionOne')
を使用して、コンポーネント内から何かを実行できます...
それらを異なるモジュールに分割できます。そうすれば、関連するすべてのミューテーション、ゲッター、状態、およびアクションを別々のファイルに保持できます。ドキュメントは私ができるよりもそれをよりよく説明しています: https://vuex.vuejs.org/en/modules.html
@ bigsee's fine answer に加えて、index.js
ファイルを使用してモジュールをエクスポートする場合:
└── src
├── assets
├── components
└── store
└─ mymodule
├── state.js
├── actions.js
├── mutations.js
├── getters.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
}
const getData = state => state.data
export {
getData
}
アクション、ミューテーション、状態ファイルと同様です。