Vue를 위한 Pinia: defineStore와 storeToRefs
defineStore로 Pinia 저장소를 정의하고 컴포넌트에서 사용하며, 상태를 구조 분해할 때도 반응성을 유지하도록 storeToRefs를 사용합니다.
Vue를 위한 Pinia: defineStore와 storeToRefs은(는) CoddyKit의 무료 Frontend Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Frontend Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Pinia란 무엇입니까?
Pinia는 Vue 3의 공식 상태 관리 라이브러리입니다. Vuex를 대신하며, 더 단순하고 타입 안전하며 DevTools와 통합된 API를 제공합니다. Composition API와 비슷한 방식으로 사용할 수 있습니다.
Pinia 설치
Pinia 플러그인을 설치하고 Vue 앱에 등록하십시오.
npm install pinia
// main.ts
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';
const app = createApp(App);
app.use(createPinia());
app.mount('#app');defineStore — Composition API 방식
defineStore는 스토어를 만듭니다. Composition API 방식에서는 컴포저블과 마찬가지로 ref, computed, 함수를 직접 사용합니다.
// stores/counter.ts
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
export const useCounterStore = defineStore('counter', () => {
const count = ref(0);
const doubled = computed(() => count.value * 2);
function increment() { count.value++; }
return { count, doubled, increment };
});defineStore — Options 방식
Options 방식은 Vue의 Options API를 본뜹니다. 반응형 데이터에는 state(), computed와 같은 기능에는 getters, methods와 같은 기능에는 actions를 사용합니다.
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0 }),
getters: {
doubled: (state) => state.count * 2,
},
actions: {
increment() { this.count++; },
async fetchAndSet(id: string) {
this.count = await fetchCount(id);
}
}
});구성 요소에서 스토어 사용
setup() 내부에서 스토어 훅을 호출하십시오. 스토어는 반응형 객체이므로 상태를 읽고 액션을 직접 호출할 수 있습니다.
<script setup>
import { useCounterStore } from '@/stores/counter';
const store = useCounterStore();
</script>
<template>
<p>{{ store.count }}</p>
<button @click="store.increment">+</button>
</template>storeToRefs — 안전한 구조 분해
스토어를 직접 구조 분해하면 상태와 getter의 반응성을 잃어 일반 값이 됩니다. 반응성을 유지하며 구조 분해하려면 storeToRefs()를 사용하십시오.
import { storeToRefs } from 'pinia';
const store = useCounterStore();
// Actions can be destructured normally (they're functions):
const { increment } = store;
// State and getters need storeToRefs:
const { count, doubled } = storeToRefs(store);$patch — 일괄 업데이트
store.$patch()는 여러 상태 변경을 하나의 작업으로 적용합니다. 서로 관련된 업데이트를 일괄 처리할 때 유용합니다.
store.$patch({
count: 10,
name: 'Updated'
});
// Or with a function for complex logic:
store.$patch(state => {
state.items.push(newItem);
state.total += newItem.price;
});$subscribe — 스토어 변경 감시
store.$subscribe(callback)은 모든 스토어 변경에 반응합니다. 전체 스토어를 대상으로 하는 Vue의 watch와 비슷합니다.
Pinia 플러그인
Pinia 플러그인은 모든 스토어를 확장합니다. 일반적인 용도는 상태를 localStorage에 저장하거나, 디버깅 기록을 추가하거나, 서비스를 주입하는 것입니다.
import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);Pinia DevTools
Pinia는 Vue DevTools와 통합됩니다. 스토어 상태를 검사하고, 어떤 작업이 호출되었는지 확인하며, 상태 스냅샷 사이를 시간 이동할 수 있습니다.
여러 스토어
도메인마다 하나의 스토어를 만드십시오(useAuthStore, useCartStore, useNotificationStore). 스토어는 서로를 가져와 사용할 수 있습니다. Pinia의 평면 구조(중첩 모듈 없음) 덕분에 이 작업이 간단합니다.
빠른 확인
Pinia 스토어를 구조 분해 할당할 때 storeToRefs()를 사용해야 하는 이유는 무엇입니까?
복습: Pinia
defineStore는 스토어를 생성합니다. Composition API 또는 Options API 방식으로 작성할 수 있습니다. useXxxStore() 훅으로 접근합니다. 반응형 구조 분해 할당에는 storeToRefs()를 사용합니다. 일괄 업데이트에는 $patch()를 사용합니다. 상태 영속화 및 기타 확장에는 플러그인을 사용합니다. DevTools와 통합됩니다. 도메인마다 하나의 스토어를 사용하며 Vuex 방식의 중첩 모듈은 없습니다.
AI 튜터와 함께 HTML을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 41
- 레슨
- 163
자주 묻는 질문
“Vue를 위한 Pinia: defineStore와 storeToRefs” 강의는 무료인가요?
네 — “Vue를 위한 Pinia: defineStore와 storeToRefs” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Frontend Academy 강의 전체를 잠금 해제할 수 있습니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Vue를 위한 Pinia: defineStore와 storeToRefs”에서 뭘 배우나요?
defineStore로 Pinia 저장소를 정의하고 컴포넌트에서 사용하며, 상태를 구조 분해할 때도 반응성을 유지하도록 storeToRefs를 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 Frontend Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Frontend Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Frontend Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Vue를 위한 Pinia: defineStore와 storeToRefs” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Frontend Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Frontend Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Redux Toolkit: createSlice와 configureStore
- 가벼운 React 상태 관리를 위한 Zustand
- Vue를 위한 Pinia: defineStore와 storeToRefs
- 전역 상태와 로컬 상태를 선택하는 기준