각 항목의 Vuex getter
Vuex 스토어의 각 항목에 대해 계산된 속성을 추가하는 방법을 찾고 있습니다.예를 들어, Todo 목록 응용프로그램에서 각 Todo 항목에 DueDate 및 Completed 플래그가 있을 수 있습니다.이러한 속성을 바탕으로 ToDo 항목이 연체되었는지 계산할 수 있습니다.
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
Todos: []
},
mutations: { /* ... */ },
actions: {/* ... */ }
);
let exampleTodo = {
Title: 'Go grocery shopping',
Completed: false,
DueDate: new Date("10/12/2017")
};
지금까지 컴포넌트 레벨에서 계산된 속성을 추가해 왔습니다.mapState
다음과 같습니다.
computed: {
...mapState({
todos: state => state.Todos.map(t => {
// Add some computed fields
return {
...t,
OverDue: !t.Completed && Date.now() > t.DueDate
};
})
})
}
그러나 이는 각 구성요소에 대해 계산을 구현해야 한다는 것을 의미합니다.이렇게 간단한 것은 별 문제가 되지 않지만, 좀 더 복잡한 계산은 한 곳에 모아두는 것이 좋습니다.매장에서 할 수 있는 방법이 있나요, 아니면 이 패턴을 계속 사용해야 하나요?아니면 제가 놓친 게 또 있나요?
만들 수 있습니다.getter
Vuex 스토어에서 매핑을 수행합니다.getter 함수는 처음 액세스할 때 실행되며 반환된 값은 캐시됩니다.종속성 상태가 업데이트되지 않는 한 해당 getter에 대한 후속 참조는 캐시된 값을 반환합니다.이 경우 getter 함수가 다시 실행됩니다.
다음은 예를 제시하겠습니다.
const store = new Vuex.Store({
state: {
todos: []
},
mutations: {
SET_TODOS(state, todos) {
state.todos = todos;
}
},
getters: {
todos(state) {
return state.todos.map(t => {
return {
...t,
OverDue: !t.Completed && Date.now() > t.DueDate
}
})
}
}
})
new Vue({
el: '#app',
store,
created() {
let todos = [{
Title: 'Go grocery shopping',
Completed: false,
DueDate: new Date("10/12/2017")
}, {
Title: 'Get a haircut',
Completed: false,
DueDate: new Date("10/10/2017")
}];
this.$store.commit('SET_TODOS', todos)
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/2.4.1/vuex.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.js"></script>
<div id="app">
{{ $store.getters.todos }}
</div>
언급URL : https://stackoverflow.com/questions/46687841/vuex-getter-for-each-item
'programing' 카테고리의 다른 글
Vuex getter 반환이 정의되지 않음 (0) | 2022.08.15 |
---|---|
Maven – 항상 소스 및 자바독 다운로드 (0) | 2022.08.15 |
vue 3의 구성 API를 사용하여 플러그인을 보다 쉽게 사용할 수 있는 방법 (0) | 2022.08.15 |
알 수 없는 작업 유형: currentUser/loginUser (0) | 2022.08.14 |
인트로 추가JS 라이브러리에서 Vue-Cli/Webpack 프로젝트로의 (0) | 2022.08.14 |