2017-10-25 1 views
2

기존 Vuex 상태를 모듈로 변환하려고합니다.중첩 된 객체없이 Vuex 모듈 상태를 어떻게 사용할 수 있습니까?

const moduleA = { 
    state: {}, 

mutations: { 
    update (state, payload) { // payload is an object 
    state = payload // doesn't work 
    } 
}, 

내가 등록있어 모듈 :이 같은 모듈을 사용하기 위해 노력하고있어

const store = new Vuex.Store({ 
    modules: { 
    a: moduleA, 
    b: moduleB 
    } 
}) 

질문은 : 그것은 내가 할 노력하고있어 같은 중첩하지 않고 상태를 사용할 수 있습니까? 나는 그것이 전 state.a 대신

state.a.one 현재의 상태를 얻을 수있는이었다으로 감사 동일한 구조를 가지고 싶습니다 이상적으로

const moduleA = { 
    state: { 
    one: {} 
    }, 
    mutations: { 
    update (state, payload) { 
     state.one = payload // it works 
    }, 
    }, 
} 

: 또는 유일한 방법은 뭔가를하는 것입니다

+0

을 사용할 수 없습니다 Vue 반응성이 느슨해집니다. 'state = payload' 대신에'Object.assign (state, payload)'를 사용해 보셨습니까? –

+0

해결 된 적이 있습니까? 나는 지금 당장이 문제에 직면하고있다. – Simon

답변

0

예를 수행 할 수 있습니다 - 다만 별도의 파일에 모듈을 리팩토링하고 모두 함께 가져 인덱스 파일을 사용하고 있습니다 :

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

import users from './store.users.js' 
import entries from './store.entries.js' 

Vue.use(Vuex) 

const store = new Vuex.Store({ 
    modules: { 
    users, 
    entries 
    } 
}) 

export default store 

그런 다음 각 모듈의 파일 (예 : store.entries.js, 당신은 당신이 익숙한 패턴을 따를 수 있지만, true로 namespaced 세트 : 파일의 경우

const module = { 
    namespaced: true, 
    state: {}, 
    getters: {}, 
    mutations: {}, 
    actions: {} 
} 

module.actions.update = ({ commit, state }, payload) => { 
    // commit, state, etc refer to the local store 
} 

export default module 

이 저장소를 사용하면 인덱스를 가져올 수 있습니다 다음 모듈에 의해 호출

import store from '../stores/store.index.js' 

// ... 

store.dispatch('entries/update', payload) 
+0

죄송합니다, 내 질문을 이해하지 못했습니다. 나는 이미 별도의 파일 등을 사용합니다. 제 질문은 : 객체의 모듈 내부에 상태를 래핑하지 않을 수 있습니까? 제 말은 모듈이없는 구버전에서는'state = {users : []}'입니다. 모듈에서 상태를 객체가 아닌 배열로 만들 수 있습니까? 중첩 된 객체 대신 동일한 구조체를 사용할 수있게하려면 (사용자가'state = {users : []}'모듈에서 객체를 사용하는 경우 사용자 배열에 대한 경로는 state.users 대신 state.users.users가됩니다) –

0

state = Object.assign(state, payload)을 사용할 수 있습니다. 그러나 이것은 당신이 기존의 모든 소품과 얕은 병합 새로운 것을 계속 의미 있습니다.

을 당신이 전역 네임 스페이스까지 논리를 들어하지 않는 새로운 상태 객체를 생성하고 완전한 상태를 교체 할 경우 dynamic module registration

관련 문제