Options API | Composition API |
// /src/stores/파일Opt1.js // Options Store import { defineStore } from 'pinia'; // Options 나 Composition API 인 .vue 모두 에서 사용 가능 export const use파일Opt1Store = defineStore('파일Opt1', { state() { // 데이터 정의. 반응형. Setup Store 에서 ref() 와 reactive() 사용해야 함 return { bar1: 값, }; }, getters: { // 반응형. Setup Store 에서 computed() 사용해야 함 foo11(state) { // 필요시 state 인자로 사용 ... state.bar1 ... // state. 사용 return ...; }, foo12(param) { ... this.foo11 ... // this. 사용 return ...; }, }, actions: { // 반응형이 아니라 일반적인 함수 foo13() { ... this.foo11 ... }, foo14(param) { ... this.foo12(...) ... ... this.foo13() ... }, }, }); |
// /src/stores/파일Set2.js // Setup Store import { ref, computed } from 'vue'; import { defineStore } from 'pinia'; // Options 나 Composition API 인 .vue 모두 에서 사용 가능 export const use파일Set2Store = defineStore('파일Set2', () => { const bar2 = ref(값); // reactive() 가능 const foo21 = computed(() => bar2.value ...); const foo22 = computed((param) => foo21.value ...); const foo23 = () => { ... bar2.value ... } // 일반 함수 const foo24 = (param) => { // 일반 함수 ... bar2.value ... // 변수이므로 .value 사용 ... foo21.value ... // computed 된 변수이므로 .value 사용 ... foo23() ... // 함수이므로 .value 불필요 }; return { // store 를 사용하는 .vue 에서 인식. Composition API 가 아니라는 증거 bar2, foo21, foo22, foo23, foo24, }; }); |
// /src/views/파일2.vue <script> import { mapState, mapActions } from 'pinia'; import { use파일Opt1Store } from '@/stores/파일Opt1'; import { use파일Set2Store } from '@/stores/파일Set2'; export default { computed: { ...mapState(use파일Opt1Store, ['bar1', 'foo11', ...]), ...mapState(use파일Set2Store, { varBar2: 'bar2', varFoo21: 'foo21', ... }), }, methods() { ...mapActions(use파일Opt1Store, ['foo13', 'foo14', ...]), ...mapActions(use파일Set2Store, { fncFoo23: 'foo23', fncFoo24: 'foo24', ... }), foo() { // foo: function() { ... this.bar1 ... // this.foo11. store 명칭 그대로 사용 ... this.varBar2 ... // this.varFoo21. 새로운 명칭 사용 ... this.foo13() ... ... this.foo23() ... }, }, } </script> |
// /src/views/파일2.vue <script setup> import { storeToRefs } from 'pinia'; // 비구조화 할당 import { use파일Opt1Store } from '@/stores/파일Opt1'; import { use파일Set2Store } from '@/stores/파일Set2'; const opt1Store = use파일Opt1Store(); const set2Store = use파일Set2Store(); ... opt1Store.bar1 ... ... set2Store.bar2 ... ... opt1Store.foo13() ... ... set2Store.foo23() ... // 반응형 유지 위해 비구조화 할당시 storeToRefs() 사용 const { bar1, foo11 } = storeToRefs(opt1Store); const { bar2, foo21 } = storeToRefs(set2Store); </script> |
'Local Oriented > Vue.js' 카테고리의 다른 글
Vue 비동기 통신, fetch vs axios (2) | 2024.11.29 |
---|---|
Vue, Options API VS Composition API (1) | 2024.11.25 |
lit-html 에서 readonly, checked, disabled, selected 설정 (0) | 2024.10.17 |
Vue3 + Typescript + script setup (5) | 2024.10.07 |
'Vue + Vite' 에서의 이미지 사용 요령 (2) | 2024.09.25 |