pinia 是 Vue 官方推薦的狀態管理工具,可以解決跨元件之間資料傳遞要反覆的 props 及 emit 的問題,只要把資料跟方法放在 store 裡面,就可以讓所有的元件取用,不但傳遞變簡單了,在管理資料上面也變得更清楚。
首先安裝 pinia
main.js 中初始化
在 src 下面建立 stores 資料夾,然後在 stores 裡面建立 user.js。
HelloWorld.vue
在 Composition 中使用 pinia
簡單初始化,首先
使用 reactive 格式
然後在 setup()
把 userStore
賦值給一個常數 user
,記得要 把 user
給 return
出去。
然後在 HTML 中使用 {{ user.變數名稱或方法 }}
, 就可以綁定 user.js
裡面 state
定義的資料、 getters
及 actions
中的方法,而且這樣的情形下,資料及方法都是 reactive
格式的,所以可以做到雙向綁定。
HelloWorld.vue
使用 ref 格式
要使用 ref
格式,除了 import userStore from "@/stores/user";
之外,還必須匯入一個 pinia
提供的 { storeToRefs }
方法,把 store
中定義的方法跟資料轉為 ref
格式:
然後在 setup() 中,取出 store 中的變數及方法:
return
的時候除了 user
之外, name
、 friend
及 getFriendName
也要記得 return
出去。
這時 HTML 中的 {{ user.xxxx }}
就可以拿掉了。但是如果要在 setup()
中更改 變數的值,就要像使用 ref
一樣,加上 xxxx.value
。
如果在 state 中不用作到雙向綁定的,就直接取出
HelloWorld.vue
使用 pinia 提供的 patch 方法修改資料:
使用 pinia 提供的 reset 方法重置資料: