
Pinia는 Vue의 Store 라이브러리로, 컴포넌트/페이지 간 state를 공유할 수 있게 해줍니다.
상태관리 라이브러리를 꼭 써야 한다고 하지만, 반드시 필수 X
대신, 다음과 같은 상황에서 사용하면 유용합니다.
npm install pinia
예시: src/store.js
// src/store.js
import { defineStore } from 'pinia'
// `defineStore()`의 반환값에 원하는 대로 이름을 지을 수 있지만,
// `use`로 시작해 `Store`로 끝나는 Store의 이름을 사용하는 것이 좋습니다.
// (예: `useUserStore`, `useCartStore`, `useProductStore`)
// 첫 번째 인수는 애플리케이션 내 Store의 고유 ID입니다.
export const useMainStore = defineStore('main', {
state: () => ({
// 여기에 데이터를 저장합니다.
// 예시: count: 0, name: ''
}),
// 필요에 따라 getters, actions도 추가 가능
})
Vue3에서는 main.js에서 Pinia를 생성해 앱에 등록해야 합니다.
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')
※ 등록하지 않으면 스토어에 접근할 수 없으므로 반드시 추가해야 합니다.
Vue3의 <script setup> 문법을 사용하여 Pinia 스토어를 불러올 수 있습니다.
<template>
<div>
<!-- 템플릿에서 스토어 데이터 출력 -->
<p>{{ mainStore.someData }}</p>
</div>
</template>
<script setup>
import { useMainStore } from '@/store' // store.js의 경로에 맞게 조정
const mainStore = useMainStore()
// 일반 함수나 라이프사이클 훅 등에서 mainStore.someData로 접근 가능
</script>
store.js)에 데이터를 정의합니다.{{ mainStore.데이터명 }}으로 사용합니다.mainStore.데이터명으로 접근합니다.<script setup> 문법으로 간결하게 스토어를 불러와 사용할 수 있습니다.