Nuxt.js를 사용할 때 동적 Vuex 모듈을 초기화할 때 가장 적합한 방법은 무엇입니까?
최근에는 다양한 Vuex 모듈을 사용하는 대규모 애플리케이션을 구축하고 있습니다.그 중 하나를 살펴보겠습니다(예:support-chat
지원 채팅은 자체 페이지에 있으며, 초기 애플리케이션 로드 시 이 모듈로 스토어를 오염시키는 것은 중복됩니다.이 모듈은 페이지가 로드되면 동적으로 등록하는 것이 목표입니다.이 모듈을 어디에, 언제, 어떻게 등록해야 하는지 묻고 싶습니다.
이 모듈을 에 등록합니다.beforeCreate
페이지 구성 요소의 후크:
import supportChatModule from '@/vuex/modules/support-chat'
// ...
beforeCreate() {
this.$store.registerModule('support-chat', supportChatModule, { preserveState: process.client })
},
beforeDestroy() {
this.$store.unregisterModule('support-chat')
}
// ...
그 접근법에는 어떤 함정이 있습니까?
그 문제를 해결하기 위한 당신의 접근방식을 공유해 주시면 감사하겠습니다.
나는 이 문제로 오랫동안 고생했다.드디어 독특한 방법이 생각났어요.이사해서 이렇게 했어요.register
그리고.unregister
각 페이지의 모듈은router file
(router/index.js
(프로젝트 중)에beforeEach
메서드 및 필요한 모듈 추가path
.
- 일부 모듈은 페이지 간에 공유되므로 이 문제가 해결됩니다.
- 일부 모듈은 서버로부터 대량의 데이터를 수신합니다.이러한 데이터를 다시 수신하지 않으려면 클라이언트 측에 머무르는 것이 좋습니다.이거 냉동고랑 같이 했어요.
이 방법은 개선할 수 있습니다.
router/index.displaces
router.beforeEach((to, from, next) => {
// unregister modules
if (from.meta.modules) {
for (const key in from.meta.modules.primary) {
if (to.meta.modules && to.meta.modules.primary.hasOwnProperty(key)) {
continue;
}
if (store.state.hasOwnProperty(key)) {
// don't unregister freeze modules
if (from.meta.modules.hasOwnProperty('freeze') && from.meta.modules.freeze.find(item => item == key)) {
continue;
}
store.unregisterModule(key);
}
}
}
// register modules
if (to.meta.modules) {
for (const key in to.meta.modules.primary) {
const module = to.meta.modules.primary[key]();
if (!store.state.hasOwnProperty(key)) {
store.registerModule(key, module.default);
}
}
}
});
그리고 내 길은 이렇다.
{
path: 'users',
name: 'users',
meta: {
modules: {
primary: {
user: () => require('@/store/modules/moduleUser')
}
},
},
component: () => import('../views/users.vue')
},
{
path: 'foods',
name: 'foods',
meta: {
modules: {
primary: {
food: () => require('@/store/modules/moduleFood'),
user: () => require('@/store/modules/moduleUser')
},
freeze: ['food']
},
},
component: () => import('../views/foods.vue')
},
순서 1:
믹스인을 만듭니다.이름을 지었습니다.register-vuex-module.js
:
export const registerVuexModule = (name, module) => ({
beforeCreate() {
const { $store } = this
if ($store.hasModule(name)) $store.commit(`${name}/resetState`)
else $store.registerModule(name, module().default)
}
})
순서 2: mixin을 사용하여 모듈을 Import합니다.
<template>
...
</template>
<script>
// Mixins
import { registerVuexModule } from '@/mixins/register-vuex-module'
export default {
mixins: [registerVuexModule('module-name', () => require('./vuex/MyVuexModule.js'))],
}
</script>
순서 3:
Vuex 모듈에 다음 구성 요소가 있는지 확인합니다.resetState
변환 및 함수로부터 상태가 반환됩니다.예를 들면 다음과 같습니다.MyVuexModule.js
다음과 같이 표시됩니다.
const initialState = () => ({
count: null
})
export default {
namespaced: true,
state: initialState(),
mutations: {
// ...
resetState: state => Object.assign(state, initialState())
}
}
언급URL : https://stackoverflow.com/questions/58845658/what-is-the-best-approach-in-dynamic-vuex-module-initialisation-when-using-nuxt
'source' 카테고리의 다른 글
헤더 파일을 C/C++에 여러 번 포함 (0) | 2022.08.11 |
---|---|
Vue.js 클릭 후 이전 클래스를 삭제할 때 활성 클래스를 추가하려면 (0) | 2022.08.11 |
메이븐과의 관계도 포함해서 (0) | 2022.08.11 |
고속 메모리 복사 방법(ARGB에서 BGR로) (0) | 2022.08.11 |
vue-class-component를 사용하여 es6 vue-component 라이브러리를 구축하는 방법 (0) | 2022.08.11 |