Vuex: 복잡한 객체 및 상태 변경 기능 사용
외부 API를 사용하고 있다고 가정합니다.Machine
물건들.작성할 수 있습니다.Machine
와 함께createMachine
여러 중첩된 속성을 가진 복잡한 개체와 해당 개체의 상태를 변경하기 위한 함수 집합을 제공합니다.API는 예를 들어 다음과 같습니다.loadMemory
,sleep
,connectDevice
(유사한 것을 상상해 보십시오.이것은 예에 지나지 않습니다).
글로벌 Vuex를 사용하고 싶다Machine
object를 사용하여 다음과 같이 초기 생성을 디스패치하고 반환된 객체를 저장합니다.
actions: {
createChannel({ commit, state }, params) {
m.createMachine(params).then(
function (newMachine) {
commit('setMachine', newMachine);
}
).catch(err => { console.error("Error"); } )
}
}
이 경우 돌연변이는 매우 간단합니다.
setMachine(state, machine) {
state.machine = machine;
}
"Machine" 객체에 대해 설정된 API에는 상태를 수정하는 호출이 많이 있습니다. 어떤 필드가 변경되는지 알 수 없습니다.상태가 변경되기 때문에, 그것들을 사용해 글로벌하게 영향을 주고 싶다.Machine
Vuex 스토어의 오브젝트를 액션으로 감싸고 싶습니다.
액션이 호출할 수 있습니다.
this.state.machine.loadMemory(mem.addr)
그러나 이 콜이 그 자체를 변경했다면machine
오브젝트, 새로운 상태를 커밋하려면 어떻게 해야 합니까?이전 개체를 복제하고 상태 변경 메서드를 적용하고 개체를 교체해야 합니까?
복제는 쉬운 일이 아니라는 것을 알고 있습니다.
고마워요.
복잡한 개체를 다시 마운트할 수 있습니다.이 예에 따르면 다음과 같은 돌연변이가 발생할 수 있습니다.
loadMemory(state, newAddr) {
const { machine } = state;
state.machine = {
...machine, // set all machine's properties
addr: newAddr,
};
}
원하는 중첩된 개체 수준에서 작동합니다.또 다른 예는 다음과 같습니다.
loadMemory(state, newValue) {
const { machine } = state;
const { machineObjProp } = machine;
state.machine = {
...machine, // set all machine's properties
machineObjProp: {
...machineObjProp, // set all machineObjProp's properties
value: newValue,
},
};
}
lodash clone Deep을 사용하는 방법 중 하나는 앱 속성 및 객체의 메서드를 복사하는 것입니다.
import _ from lodash
this.state.machine.loadMemory(mem.addr)
const copyMachine = _.cloneDeep(this.state.machine)
this.$store.commit('setMachine', copyMachine)
언급URL : https://stackoverflow.com/questions/57225016/vuex-working-with-complex-objects-and-state-changing-functions
'programing' 카테고리의 다른 글
C코드 루프 퍼포먼스 [계속] (0) | 2022.08.15 |
---|---|
Vuex에서의 디바운스 사용방법 (0) | 2022.08.15 |
C 구조 상속 포인터 정렬 (0) | 2022.08.15 |
Vuex getter에서 rootState에 액세스하는 중 (0) | 2022.08.15 |
Retrofit 2를 사용하여 모든 요청에 머리글 추가 (0) | 2022.08.15 |