Vue 3.0/07.pinia

[vue3-pinia] 03. 기타

  • -

이번 post에서는 pinia의 부가적인 기능들에 대해 살펴보자.

 

내장 함수들

 

$subscribe

watch와 유사하게 store의 $subscribe 함수를 이용하면 state의 상태 변화를 모니터링할 수 있다. $subscribe의 콜백 함수에는 mutation과 state 객체가 전달되는데 mutation에는 변경에 대한 상세한 정보가 추가된다.

todoStore.$subscribe((mutation, state) => {
    console.log("변경됨: ", state);
    console.log(`mutation type: ${mutation.type}`);        // direct | patch object | patch function
    console.log(`mutation storeId: ${mutation.storeId}`);
    console.log(`mutation payload: ${mutation.payload}`);  // patch object일 경우 $patch에 전달된 객체
});

상세한 내용을 볼 수 있다는 점 외에도 watch와의 차이점은 동시에 여러 번의 patch 가 진행되는 경우 $subscribe는 매번 변경을 감지하지만 watch는 한 번만 감지한다. 

따라서 store의 상태를 localstorage에 저장한다고 할 때 건별로 저장할 거냐 아니냐에 따라서 $subscribe에서 할 수도 있고 watch에서 할 수도 있다.

watch(todoStore, 
     (newState) => localStorage.setItem(todoStore.$id, JSON.stringify(newState)), 
     {deep: true}
)

 

$reset

필요하다면 state를 최초 상태로 reset 시킬 수 있는데 options 형태로 사용하는 경우는 $reset() 함수가 내장돼서 호출만 하면 된다. 하지만 composition 형태는 $reset()이 바인딩되지 않았기 때문에 직접 store에서 작성해주어야 한다. 결국은 굳이 $reset일 필요는 없지만 일관성을 위해서 $reset이라고 함수를 추가해 주자.

export const useTodoStore = defineStore('todo', () => {
  . . .

  const $reset = () => {
    nextId = 1
    todos.splice(0, todos.length)
  }
  return {todos, todoStatus, $reset }
})

 

'Vue 3.0 > 07.pinia' 카테고리의 다른 글

[vue3-pinia] 04. pinia-plugin-persistedstate  (2) 2023.10.15
[vue3-pinia] 02. todos 관리  (0) 2023.10.15
[vue3-pinia] 01. Pinia 개요  (0) 2023.10.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.