Vue 基礎 V. ( Pinia )
這裡提到了 Pinia 的使用,過去使用的是 Vuex,自從 Vue3 後開始推行 Pinia。
基本安裝
cmd
npm add pinia
Pinia
安裝與使用的基本上只有幾個原則:
必須使用
defineStore()來定義它。建立單獨的sotre資料夾及檔案,
state與data是一樣資料存放區。getters與Computed類似,處理state資料後可以提取使用。actions與method類似,使用this處理資料後放到state內,可以將axios後將資料放入。
cmd... src /stores /store.js ...jsimport {defineStore} from 'pinia' export const myuseStore=defineStore('mystore',{ state:()=>({ myData:[], refData:"", count: 0 }) ... })jsimport {defineStore} from 'pinia' export const myuseStore=defineStore('mystore',{ ... getters:{ myComputed:(state)=>{ state.count*2 } } ... })jsimport {defineStore} from 'pinia' export const myuseStore=defineStore('mystore',{ ... actions:{ myMethod(){ this.count++ }, async axiosData (){ try{ const getdata=awit axios.get('url / path') this.myData=getdata.data } catch(error){ console.log(error) } }, getMsg(msg,msg1){ console.log(msg,msg1) } } ... })掛進
main.js內。js... import {createPinia} from 'pinia' ... const pinia=createPinia() ... app.use(pinia) ...在
.vue內使用。actions是需要被驅動,才會有作用,就像vue裡面的method,需要 ( @cilck ) 才會執行;下方舉例用在axios時,該如何驅動。
js
import {ref, reactive} from 'vue'
import {myuseStore} from '../stores/store.js'
import {storeToRefs } from 'pinia'
const useStore = myuseStore()
const {refData} = storeToRefs(useStore)
...
const usRef = ref(refData)
const list = reactive ( myuseStore.myData )
js
import {reactive} from 'vue'
import {myuseStore} from '../stores/store.js'
import {storeToRefs } from 'pinia'
const useStore = myuseStore()
...
js
<template>
<ul>
<li v-for="item in getData" :key="item.id">
<a :href="item.link"> {{item.name}} </a>
</li>
</ul>
...
<div @click = "useStore.getMsg ( msg1, msg2 )" ></div>
</template>
<script setup>
import {onMounted, computed} from 'vue'
import {myuseStore} from '../stores/store.js'
const useStore = myuseStore()
...
const getData = computed (()=>{
return useStore.myData
})
onMounted(()=>{
useStore.axiosData()
})
</script>
提醒
因為本身 store是reactive物件;如果 storeToRefs 解構時使用,將會失去響應式效果。可參考 官方 敘述