vuex 파일을 분할하려면 어떻게 해야 합니까?
점점 더 많은 변이자들이 있는 vuex 파일을 가지고 있지만 다른 파일로 분할하는 방법이 정확한지 잘 모르겠습니다.
왜냐하면 나는 다음이 있기 때문이다.
const store = new Vuex.Store({ vuex stuff })
그 다음 Vue 앱의 메인 선언:const app = new Vue({ stuff })
Vue 컴포넌트로 작업하는 것은 만족스럽고 이미 많은 컴포넌트를 가지고 있지만, 이 컴포넌트는 앱의 최상위 레벨이기 때문에 어떻게 분해해야 할지 모르겠습니다.조언해주시면 감사하겠습니다.
더 복잡한 모듈러 애플리케이션 구조를 만들지 않고 Vuex 파일을 분할하고 싶은 사용자에게는 액션, 돌연변이 및 getter를 다음과 같이 별도의 파일로 분할할 수도 있다고 생각합니다.
└── src
├── assets
├── components
└── store
├── store.js
├── actions.js
├── mutations.js
└── getters.js
store.displaces를 설정합니다.
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.syslog
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,
};
getters.displays(게터s.displays)
const prop1 = state => state.someObj.prop1;
const prop2 = state => state.someObj.prop2;
export default {
prop1,
prop2,
};
컴포넌트 내에서 통상적인 방법으로 원하는 대로 작업을 수행할 수 있습니다.this.$store.dispatch('actionOne')
...
이것은 상점을 분할하기 위한 또 다른 옵션이며 다른 모듈을 가지고 있습니다.이것은 이미 테스트되고 있습니다.
구조.
└── src
├── assets
├── components
└── store
└─ modules
└─ module1
├── state.js
├── actions.js
├── mutations.js
├── getters.js
└── index.js
└─ module2
├── state.js
├── actions.js
├── mutations.js
├── getters.js
└── index.js
└─ index.js
store/index.displaces
import Vuex from "vuex";
import thisismodule1 from "./modules/module1";
import thisismodule2 from "./modules/module2";
const createStore = () => {
return new Vuex.Store({
modules: {
module1: thisismodule1,
module2: thisismodule2
}
});
};
export default createStore;
store/syslog/syslog1/index.syslogs
import actions from './actions';
import getters from './getters';
import mutations from './mutations';
import state from './state';
export default {
state,
actions,
mutations,
getters
}
store/syslog/syslog2/index.syslogs
import actions from './actions';
import getters from './getters';
import mutations from './mutations';
import state from './state';
export default {
state,
actions,
mutations,
getters
}
Tipp: 스토어를 main.js로 Import하는 것을 잊지 마세요.
문서: https://vuex.vuejs.org/en/modules.html
다른 모듈로 나눌 수 있습니다.이렇게 하면 관련된 모든 돌연변이, 게터, 상태 및 작업을 별도의 파일에 보관할 수 있습니다.이 설명서는, https://vuex.vuejs.org/en/modules.html 를 참조해 주세요.
@bigsee의 훌륭한 답변에 덧붙여,index.js
모듈을 내보내는 파일:
└── src
├── assets
├── components
└── store
└─ mymodule
├── state.js
├── actions.js
├── mutations.js
├── getters.js
└── index.js
index.displaces를 표시합니다.
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.displays(게터s.displays)
const getData = state => state.data
export {
getData
}
동작, 돌연변이 및 상태 파일과 유사합니다.
이 구조는 동적으로 로드 스토어 모듈과 함께 사용할 수 있습니다.
src
└─ store
└─ modules
└─ [module-name].js
└─ ...
└─ index.js // <- your store main file
및 index.display에 있습니다.
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
// Load store modules dynamically.
const requireContext = require.context('./modules', false, /.*\.js$/)
const modules = requireContext.keys()
.map(file =>
[file.replace(/(^.\/)|(\.js$)/g, ''), requireContext(file)]
)
.reduce((modules, [name, module]) => {
if (module.namespaced === undefined) {
module.namespaced = true
}
return { ...modules, [name]: module }
}, {})
export default new Vuex.Store({
modules
})
그런 다음 모듈 [이름]을(를) 입력해 주세요.js는 modules 폴더에 있습니다.예:
auth.module:
// state
export const state = {}
// getters
export const getters = {}
// mutations
export const mutations = {}
// actions
export const actions = {}
액션/게이터에 액세스 할 수 있습니다.다음 사항을 기입해야 합니다.
export default {
computed: {
...mapGetters({
method_1: '[module-name]/method_1',
method_2: '[module-name]/method_2',
}),
method_with_arg(){
return this.$store.getters['[module-name]/method_with_arg'](this.n)
}
},
...
Cretu Eusebiu의 데모는 이쪽(laravel-vue-spa)에서 보실 수 있습니다.
감사합니다.
다음과 같은 구조를 가지고 있습니다.
└── store
└─ module1
├── actions.js
├── mutations.js
├── getters.js
└── index.js
index.js
module1에서 다음 코드 예를 복사할 수 있습니다.index.discode
import actions from "./actions";
import getters from "./getters";
import mutations from "./mutations";
import { state } from "./state";
export default {
state: () => state,
actions,
mutations,
getters,
};
상태:
export let state = {
themes: [],
};
getters:
const themesList = (state) => {
return state.themes;
};
액션:
const getThemesList = async ({ commit }) => {
commit(types.GET_THEMES, [values]);
};
돌연변이:
const GET_THEMES = (state, themes) => {
state.themes = themes;
};
그리고 매장에 있는 메인 인덱스에 이것을 넣으세요.
const createStore = () => {
return new Vuex.Store({
modules: {
module1: module1,
},
});
};
export default createStore;
중첩된 더 많은 Moudle의 경우 하위 모듈로 'modules'를 내보낼 수 있습니다.
하위 모듈에서 멀티들을 노출시키는 방법은 무엇입니까?
import Vuex from 'vuex';
import Vue from 'vue';
import actions from './actions';
import getters from './getters';
import mutations from './mutations';
import moudles from './moudles';
Vue.use(Vuex);
export const store = new Vuex.Store({
state: {
someObj: {},
},
actions,
getters,
mutations,
moudles,
});
└── src
├── assets
├── components
└── store
└─ modules
└─ module1
├── state.js
├── actions.js
├── mutations.js
├── getters.js
└── index.js
├── modules
|____moudleA (state.js.....)
|____moudleB (state.js.....)
└─ module2
├── state.js
├── actions.js
├── mutations.js
├── getters.js
└── index.js
└─ index.js
상세한 것에 대하여는, https://vuex.vuejs.org/guide/modules.html 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/40564071/how-do-i-break-up-my-vuex-file
'programing' 카테고리의 다른 글
snprintf 및 Visual Studio 2010 (0) | 2022.08.14 |
---|---|
Java에서 public, protected, package-private 및 private의 차이점은 무엇입니까? (0) | 2022.08.14 |
세미콜론 및 IF/WHILE/FOR 문이 없는 C의 hello world (0) | 2022.08.14 |
동일한 이미지에서 불필요한 http 요청 방지 - vuejs (0) | 2022.08.14 |
Vue.js 2 - 폼을 작은 컴포넌트로 분할하는 것은 나쁜 방법입니까? (0) | 2022.08.14 |