vuex의 반응성 게터?
목록에서 항목을 반환하는 getter가 vuex에 있습니다.
const store = new Vuex.Store({
state: { arr: {
1: {name: 'one', attr: true},
2: {name: 'two', attr: false}
},
mutations: {
setArrItemName(state, id, name) {
Vue.set(state.arr, id, name);
}
},
getters: {
arrItemById(state, getters) => (id) => {
const item = state.arr[id];
if(item) return item;
return {
name: 'default', attr: true
};
}
}
})
템플릿으로 출력하면
{{ $store.state.arr[1]['name'] }}
다른 부품이 호출하면 정상적으로 갱신됩니다.
this.$store.commit('setArrItemName', 1, 'new name');
그러나 템플릿에 다음 항목이 포함된 경우
{{ $store.getters.arrItemById(1).name }}
그러면 업데이트되지 않습니다.
문제: 이 getter는 다른 장소에서 사용되므로 이 코드를 복제하지 않습니다.
<template v-if='$store.state.arr[id]'>
{{ $store.state.arr[id].name }}
</template>
Default
<template v-else>
</template>
'기본값'인 경우 날짜 변경 또는 기타 속성 변경default
오브젝트는 다른 장소에서 갱신해야 합니다.
계산된 속성을 사용하여 getter에 액세스해 보십시오.첫 번째로 Import 합니다.mapGetters
Vuex로부터의 기능:
import {mapGetters} from 'vuex';
그런 다음 다음과 같이 원하는 getter의 계산된 속성을 추가합니다.
computed: {
...mapGetters({
getterName: 'your-getter-name-in-store'
})
}
스프레드 오퍼레이터(...
)를 사용하는 동안mapGetters
도우미: 자세한 내용은 여기를 참조하십시오.
그런 다음 템플릿에서{{ getterName }}
.
이것은 코드 복제의 문제도 해결합니다.사용자는 이 기능을 사용할 필요가 없기 때문입니다.this.$store.getters
온통.
순수하지 않은 게터로는 반응할 수 없어요로컬에 계산된 속성을 생성할 수 있습니다.
출처 : https://github.com/vuejs/vuex/issues/145#issuecomment-230488443
제가 조사를 좀 해봤는데, 안에 게터가 있으면 계산 함수를 사용할 수 있어요.
computed: {
arr() {
return this.$store.getters.arrItemById(this.id);
}
},
다음은 jsfiddle의 예입니다.
이 오타가 질문에만 있는 건지, 아니면 당신의 프로그램에도 있는 건지...
위에서부터
const store = new Vuex.Store({
state: { arr: {
1: {name: 'one', attr: true},
2: {name: 'two', attr: false}
},
mutations: {
...
그래야 한다
const store = new Vuex.Store({
state: { arr: {
1: {name: 'one', attr: true},
2: {name: 'two', attr: false}
} // missing this closing brace on object arr
},
mutations: {
...
그게 문제가 되는 이유를 설명해 줄 수 있겠네요.
언급URL : https://stackoverflow.com/questions/43939024/reactive-getter-in-vuex
'programing' 카테고리의 다른 글
프로젝트를 Eclipse로 가져온 후 'Must Override a Superclass 메서드' 오류 (0) | 2022.07.03 |
---|---|
텍스트 입력의 경우 클릭 시 모든 항목이 선택되도록 하려면 어떻게 해야 합니까? (0) | 2022.07.03 |
vue.js 라우터 탐색 쿼리 변경에 대해 중복됨 (0) | 2022.07.03 |
표 머리글의 텍스트 정렬 (0) | 2021.01.18 |
새 객체에서 JavaScript 프로토 타입 속성이 정의되지 않은 이유는 무엇입니까? (0) | 2021.01.18 |