Grace
grace's dev_note
Grace
전체 방문자
오늘
어제
  • 분류 전체보기
    • FrontEnd
      • Next.js
      • React
      • ReactNativ..
      • Vue
    • Javascript
      • 러닝 자바스크립트
      • 모던 자바스크립트
    • CS
    • DataScienc..
      • Data Struc..
      • LeetCode
    • BackEnd
      • Express
      • Node.js
      • Nest.js
    • DevOps
      • Docker
    • 매일메일
    • 회고
    • 코드캠프

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • tanstack
  • javascript
  • Vue
  • vitejs
  • Vue3
  • pinia
  • React Native
  • nest.js
  • backend
  • node.js
  • 알고리즘
  • 함수
  • postgres
  • Express
  • Vite
  • 번들러
  • Vue.js
  • PostgreSQL
  • vue-query

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Grace

grace's dev_note

FrontEnd/Vue

[Pinia] Store

2023. 4. 17. 16:19

Store 정의

Store는 defineStore()를 사용하여 정의합니다. 그리고 매개변수로 유니크한 이름을 전달해야 합니다.

import { defineStore } from 'pinia'

// useStore는 useUser, useCart와 같을 수 있습니다.
// 첫 번째 인수는 애플리케이션 전체에서 스토어의 고유 ID입니다.
export const useStore = defineStore('main', {
  // 다른 옵션...
})

id라고도 하는 이 이름은 꼭 필요하며 Pinia에서 Store를 devtools에 연결하는 데 사용합니다. 그리고 반환된 함수의 이름은 use...로 지정하는 것은 사용법을 관용적으로 만들기 위한 composable API 전반에 걸친 규칙입니다.

Store 사용하기

setup() 함수 내부에서 useStore()가 호출될 때까지 Store가 생성되지 않기 때문에 Store를 정의하고 있습니다.

<script setup>
  import { useCounterStore } from '@/store/counterStore'
  const counterStore = useCounterStore()
</script>

원하는 만큼 Store를 정의할 수 있으며 pinia를 최대한 활용하려면 각 Store를 다른 파일에 정의해야 합니다.

Store가 인스턴스화되면 store에서 직접 state, getters, actions에 정의된 모든 속성에 액세스할 수 있습니다.

store는 reactive로 래핑된 객체입니다. 그렇기 때문에 .value로 값을 가져오지 않아도 됩니다. 그러나 구조를 분해해서 재할당할 수 없습니다.

<script setup>
  import { useCounterStore } from '@/store/counterStore'
  const counterStore = useCounterStore()
  // ❌ 이것은 반응성을 깨뜨리기 때문에 작동하지 않습니다.
  const { count, doubleCount } = counterStore
  
  console.log(count) // 항상 1입니다. 
  console.log(doubleCount) // 항상 2입니다.
</script>

반응성을 유지하면서 Store에서 속성을 추출하려면 storeToRefs()를 사용해야 합니다. 그러면 모든 반응 속성에 대한 참조를 생성합니다. 이것은 store의 state만 사용하고 actions를 호출하지 않을 때 유용합니다. Store 자체에도 바인딩되므로 store에서 직접 actions를 구조분해 할당할 수 있습니다.

<script setup>
  import { useCounterStore, storeToRefs } from '@/store/counterStore'
  const counterStore = useCounterStore()
  const { count, doubleCount } = storeToRefs(counterStore)
  // actions은 그냥 추출할 수 있습니다.
  const { counter } = counterStore
</script>
저작자표시 비영리 변경금지 (새창열림)

'FrontEnd > Vue' 카테고리의 다른 글

[Pinia] Getters  (0) 2023.04.18
[Pinia] State  (0) 2023.04.17
[Pinia] 상태관리 라이브러리  (0) 2023.04.17
[Vue3] Composable API  (0) 2023.04.17
[Vue3] Vue Router  (0) 2023.04.17
    'FrontEnd/Vue' 카테고리의 다른 글
    • [Pinia] Getters
    • [Pinia] State
    • [Pinia] 상태관리 라이브러리
    • [Vue3] Composable API
    Grace
    Grace
    기술 및 회고 블로그

    티스토리툴바