반응형
Vuex에서 개체를 올바르게 혼합하고 격리하는 방법
모듈을 사용하여 Vuex용 믹스인을 만들려고 하지만 모듈 내에서 작업이 혼합되고 있습니다.
다음은 SubEvents 모듈입니다.
import Form from '../../classes/Form'
import * as mutationsMixin from './mixins/mutations.js'
import * as actionsMixin from './mixins/actions.js'
import * as statesMixin from './mixins/states.js'
const state = merge_objects(statesMixin.common, {
data: {},
event: null,
form: new Form({
name: null,
}),
})
const actions = merge_objects(actionsMixin, {
select() {
dd('subevent select')
},
})
const mutations = merge_objects(mutationsMixin, {
mutateSetEvent(state, payload) {
state.event = payload
},
})
dd('subEvents')
export default {
state,
actions,
mutations,
}
여기는 가게입니다
/**
* Imports
*/
import Vue from 'vue'
import Vuex from 'vuex'
/**
* Vuex
*/
Vue.use(Vuex)
/**
* Global state
*/
import * as actions from './actions'
import * as getters from './getters'
import * as mutations from './mutations'
/**
* Modules
*/
import gate from './modules/gate'
import events from './modules/events'
import subEvents from './modules/subEvents'
import categories from './modules/categories'
import people from './modules/people'
import roles from './modules/roles'
import institutions from './modules/institutions'
import environment from './modules/environment'
/**
* State
*/
const state = {
mounted: false,
}
/**
* Store
*/
let store = new Vuex.Store({
state,
actions,
getters,
mutations,
modules: {
events,
people,
categories,
environment,
subEvents,
gate,
roles,
institutions,
},
})
store.dispatch('environment/absorbLaravel')
export default store
merge_object 도우미입니다.
window.merge_objects = (target, ...sources) => {
return Object.assign(target, ...sources)
}
따라서 스토어 가져오기를 보면 이벤트 후에 subEvents가 로드되고 위의 subEvents 저장소에서 작업 select()(원래 mixin에서 전송됨)가 오버로드되고 있지만 오버로드되지 않은 events/select()를 호출하면 콘솔에 'subevent select(d()' 메시지가 표시됩니다.
이것은 그것을 조금 설명하는 이미지입니다.
문제는 복사본을 만들지 않고 첫 번째 인수로 전달하는 개체를 수정한다는 것입니다.함수는 첫 번째 개체를 반환합니다.
const a = {};
Object.assign(a, { a: 1 });
console.log(a); // { a: 1 }
당신의 경우, 저는 당신이 당신의 객체의 딥 클론이 필요하다고 생각하지 않습니다.혼합물을 직접 수정하지 않으려는 경우입니다.전화하시면Object.assign
첫 번째 인수로 새로 생성된 개체를 사용하여 다음 인수에 있는 모든 개체의 얕은 복사를 수행합니다.
Object.assign({}, target, ...sources)
const a = {};
Object.assign({}, a, { a: 1 });
console.log(a); // {}
개체에 인스턴스 간에 공유하지 않으려는 중첩된 개체가 있기 때문에 딥 클론이 필요한 경우와 같은 것을 사용하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/52906783/how-to-correctly-mix-and-isolate-objects-in-vuex
반응형
'programing' 카테고리의 다른 글
VBA 코드를 사용하여 Excel 2003에서 Excel 워크시트를 이미지로 내보내는 방법은 무엇입니까? (0) | 2023.06.16 |
---|---|
데이터 프레임에서 특정 열 추출 (0) | 2023.06.16 |
IPthon 노트북의 로깅 모듈에서 출력 가져오기 (0) | 2023.06.16 |
애플리케이션을 릴리스하기 전에 NSLog를 비활성화해야 합니까? (0) | 2023.06.16 |
C/C++의 열에 주조 (0) | 2023.06.16 |