반응형
- vue2, vue3 함께 사용 가능
- vuex 보다 간단하고, 직관적임
- mutations 없음.
- Typescript 를 지원.
- 아주 빠르고 정확한 autocompletion
- namespaced modules 없음
- devtools 공식 지원
설치
yarn add pinia
# or
npm install pinia
# or
pnpm install pinia
vuejs 의 main.js 에서
import { createApp } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
const app = createApp(App);
app.use(createPinia());
app.mount("#app");
vue2 를 사용한다면
import { createPinia, PiniaVuePlugin } from 'pinia'
Vue.use(PiniaVuePlugin)
const pinia = createPinia()
new Vue({
el: '#app',
// other options...
// ...
// note the same `pinia` instance can be used across multiple Vue apps on
// the same page
pinia,
})
예제.
Store는 defineStore 를 통해서 생성합니다.
stores/counter.js
Option stores (option api 방식과 비슷) (state, actions, getters)
// stores/counter.js
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0, name: 'Eduardo' }),
getters: {
doubleCount: (state) => state.count * 2,
},
actions: {
increment() {
this.count++
},
},
})
Setup Stores (Composition API's setup function 과 비슷)
- ref() 는 state
- computed() 는 getters
- function() 은 actions
export const useCounterStore = defineStore('counter', () => {
const count = ref(0)
const name = ref('Eduardo')
const doubleCount = computed(() => count.value * 2)
function increment() {
count.value++
}
return { count, name, doubleCount, increment }
})
component 에서 사용 예제
<script setup>
import { useCounterStore } from '@/stores/counter'
import { storeToRefs } from 'pinia'
const store = useCounterStore()
// `name`과 `doubleCount`는 반응형 참조(refs)입니다
// 이것은 플러그인에 의해 추가된 속성들에 대해서도 참조(refs)를 추출하지만,
// 어떠한 액션이나 반응형이 아닌 (참조(ref/reactive)가 아닌) 속성은 제외합니다
const { name, doubleCount } = storeToRefs(store)
// increment 액션은 구조 분해 할당을 통해 추출할 수 있습니다
const { increment } = store
</script>
> Vue3 에서는 구조분해할당을 사용하기 위해 반응형 객채를 toRefs 로 묶어서 반응형을 유지할 수 있도록 지원 합니다.
> storeToRefs 를 사용해야함!
여기에서
Option / Setup 방식 중 어떤 것을 사용해도 상관이 없습니다.
가장 편안하다고 느끼는 API를 선택하세요.
둘 다 장점과 단점이 있습니다.
Option 저장소는 작업하기가 더 쉽고
Setup 저장소는 더 유연하고 강력합니다.
아무래도 Vue 에서 사용하는 방식과 비슷하게 쓰면 좋겠죠?
확실히 Option Store 가 직관적이긴 합니다..
그래서 개인적인 생각으로는 Option store가 이해하기 쉽고, 시작하기에 좋을 것 같습니다.
전.. 저번에 했던 vuex는 Option Store 였으니, 이번엔 Setup store 방식으로 쓰려합니다
728x90
반응형
'Vue.js' 카테고리의 다른 글
[Vue3] vite.config.js 에서 환경변수 사용하기 .env (2) | 2023.10.11 |
---|---|
[vue] SweetAlert2 사용하기. (Utils Class 만들어서 사용하기) (3) | 2023.09.27 |
[vue] Composition api 에서 property로 받은 변수 watch 하는 방법 (19) | 2023.09.10 |
[Vue] computed 사용할 때 파라메터 넘기기 (0) | 2023.09.10 |
[Vue3] Vuex 에서 parameter 가 context? {commit}? (2) | 2023.09.05 |
댓글