로메오의 블로그

[Vue3 + typescript] pinia 본문

Frontend/Vue

[Vue3 + typescript] pinia

romeoh 2022. 9. 13. 10:07
반응형

VUE.JS 목록

pinia 설치 확인

Quasar cli로 프로젝트 생성시 pinia 옵션을 추가했습니다.

 

 

 

 

 

 

stores/counter-store.ts

import { defineStore } from 'pinia'

export const counterStore = defineStore('main', {
  state: () => ({
    counter: 0,
    name: 'romeoh'
  }),
  getters: {
    doubleCount: state => {
      return state.counter * 2
    }
  },
  actions: {
    reset () {
      this.counter = 0
    },
    addOne () {
      this.counter++
    }
  }
})

store 파일을 생성합니다.

 

 

 

 

 

 

 

pinia 사용하기

<template>
  <q-page>
    hello
    {{ name }}: {{ counter }} : {{ doubleCount }}
    <q-btn @click="addOne">
      addOne
    </q-btn>
    <q-btn @click="add(15)">
      add
    </q-btn>
    <q-btn @click="reset">
      reset
    </q-btn>
    <q-btn @click="update">
      update
    </q-btn>
  </q-page>
</template>

<script setup lang="ts">
import { storeToRefs } from 'pinia'
import { counterStore } from 'stores/counter-store'

const main = counterStore()

const { counter, name, doubleCount } = storeToRefs(main)
const { addOne } = main

function add (value: number) {
  main.$patch(state => {
    state.counter += value
  })

  // 또는
  // main.$patch({
  //   counter: counter.value + value
  // })
}

function reset () {
  main.$reset()
}

function update () {
  main.$state = { counter: 900, name: 'korea' }
}

main.$subscribe((mutation, state) => {
  console.log('mutation', mutation)
  console.log('state', state)
})
</script>

 

 

 

 

 

 

 

 

 

 

VUE.JS 목록

반응형
Comments