게터
판매 가능한 도서 필터링
도서 데이터의 각 아이템은 재고(inventory) 정보를 가지고 있습니다. 재고가 있는 판매 가능한 도서만 필터링하여 별도로 사용하고 싶을 수 있습니다. 이런 경우 게터(getters)를 사용합니다.
NOTE
Vuex 스토어의 게터(getters
)는 Vue 컴포넌트의 계산된 속성(computed
)과 유사합니다.
런타임 중에 필터링 하거나, 계산해야 할 때 사용합니다.
// api/shop.js
const books = [
{
name: '세계사의 거장들',
price: 22500,
inventory: 7
},
{
name: '당신이 옳다',
price: 14200,
inventory: 0 // 재고가 없는 도서
},
{
name: '꽃을 보듯 너를 본다',
price: 9000,
inventory: 13
}
]
앞서 다뤘던 setBooks 뮤테이션은 API의 books
데이터를 state.books
에 설정합니다.
스토어의 도서 데이터에서 판매 가능한 도서만 골라내려면 state.books
데이터(배열)를
필터링(filter) 하여 결과를 반환하는 게터를 추가해야 합니다.
availableBooks
게터를 추가한 후 재고가 0보다 큰 아이템만 골라내는 로직을 작성합니다.
// store/index.js
new Vuex.Store({
state: {
books: []
},
getters: {
availableBooks(state, getters) {
return state.books.filter(book => book.inventory > 0)
}
},
mutations: {
setBooks(state, books) {
state.books = books
}
}
})
NOTE
게터 메서드는 첫번째 인자로 상태(state)를 전달 받고, 뒤이어 게터(getters)를 전달 받습니다.
필터링 도서 렌더링
게터 availableBooks
가 반환하는 데이터는 재고가 있는 판매 가능한 도서만 필터링 된 결과입니다.
이 결과 값을 컴포넌트의 books
데이터로 계산되도록 설정하면 브라우저 화면엔 판매 가능한
도서만 렌더링 됩니다.
// components/BookList.vue
export default {
name: "BookList",
computed: {
books() {
return store.getters.availableBooks;
}
},
// ...
}
개발도구 Vuex 확인
Vue Devtools 개발도구의 Vuex 탭을 선택해 확인해보면 state.books
데이터와 달리 getters.availableBooks
데이터는
판매 가능한 도서만 필터링된 결과임을 볼 수 있습니다.