快速入門 Pinia 狀態(tài)管理庫

Pinia 是一個用于 Vue 的狀態(tài)治理庫,相似 Vuex, 是 Vue 的另一種狀態(tài)治理計劃。如果你現(xiàn)在使用 vue3 開發(fā)項(xiàng)目,那么推薦你使用 Pinia 開發(fā)。
Pinia的優(yōu)點(diǎn)
1、完整的 TypeScript 支持:與在 Vuex 中添加 TypeScript 相比,添加 TypeScript 更容易。
2、極其輕巧(體積約 1KB)
3、store 的 action 被調(diào)度為常規(guī)的函數(shù)調(diào)用,而不是使用 dispatch 方法或 MapAction 輔助函數(shù),這在 Vuex 中很常見。
4、支持多個Store,Pinia 不支持嵌套存儲。相反,它允許你根據(jù)需要創(chuàng)建 store。但是,store 仍然可以通過在另一個 store 中導(dǎo)入和使用 store 來隱式嵌套。
5、支持 Vue devtools、SSR 和 webpack 代碼拆分
快速開始
npm install pinia創(chuàng)建一個 pinia 作為 root store 添加到 app 中。
import { createApp } from 'vue'import { createPinia } from 'pinia'const app = createApp({})app.use(createPinia())
開始定義 store
export const useStore = defineStore('main', {state: () => ({counter: 0,}),getters: {doubleCount: (state) => state.counter * 2,},actions: {increment() {this.counter++},randomizeCounter() {this.counter = Math.round(100 * Math.random())},},})
在組件中使用 store 。
<template><div>{{store.count}}div>template><script>import { useStore } from '@/stores/counter'export default {setup() {const store = useStore()return {// 可以返回 store 實(shí)例在模板中使用store,}},}script>
同樣也支持之前的輔助函數(shù)??梢允褂?mapState 來映射我們 store 中的 state 和 getter。也可以使用 mapActions 來映射 action 函數(shù)。
import { mapState } from 'pinia'export default {computed: {..mapState(useStore, ['counter', 'doubleCount'])},methods: {...mapActions(useStore, ['increment'])...mapActions(useStore, { myOwnName: 'randomizeCounter' }),},}
Pinia 相比 Vuex 更加簡略,而且 Pinia 能夠自在擴(kuò)大。
Pinia 是合乎直覺的狀態(tài)治理形式,讓使用者回到了模塊導(dǎo)入導(dǎo)出的原始狀態(tài),使?fàn)顟B(tài)的起源更加清晰可見。
Pinia 的應(yīng)用感觸相似于 Recoil,但沒有那么多的概念和 API,主體十分精簡,極易上手(Recoil 是 Facebook 官網(wǎng)出品的用于 React 狀態(tài)治理庫,應(yīng)用 React Hooks 治理狀態(tài))。
而且 Pinia 適用于 Vue 2 和 Vue 3,并且不要求您使用 composition API。
