vue3使用Pinia的store的組件化開發(fā)模式詳解
一、安裝與初始化
安裝Pinia
npm install pinia # 或 yarn add pinia
目的:引入Pinia核心庫,為狀態(tài)管理提供基礎支持。
掛載Pinia實例
在main.js中初始化并注入Vue應用:
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia) // 關鍵!全局啟用Pinia
app.mount('#app')作用:創(chuàng)建Pinia實例并與Vue3應用集成,使所有組件可訪問Store。
二、創(chuàng)建Store(函數式寫法)
使用Composition API風格定義Store(推薦):
// stores/counter.js
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useCounterStore = defineStore('counter', () => {
// 1. 定義狀態(tài)(相當于data)
const count = ref(0)
// 2. 定義計算屬性(相當于getters)
const doubleCount = computed(() => count.value * 2)
// 3. 定義操作方法(相當于actions)
function increment() {
count.value++
}
// 暴露狀態(tài)與方法
return { count, doubleCount, increment }
})核心要點:
defineStore第一個參數為Store唯一ID(需全局唯一)- 使用
ref/computed等響應式API管理狀態(tài) - 通過函數返回值暴露需共享的狀態(tài)與方法
- 注意這個的id和實際沒什么關系,你最后還是使用useCounterStore 來獲取對象
三、在組件中使用Store
引入Store實例
在組件<script setup>中調用Store:
<script setup>
import { useCounterStore } from '@/stores/counter'
const counterStore = useCounterStore() // 實例化Store
</script>特性:Store按需實例化,支持多組件復用且狀態(tài)自動同步。
模板中訪問狀態(tài)與方法
<template>
<div>
<p>當前計數:{{ counterStore.count }}</p>
<p>雙倍計數:{{ counterStore.doubleCount }}</p>
<button @click="counterStore.increment()">+1</button>
</div>
</template>響應式原理:直接訪問Store的屬性會觸發(fā)Vue的響應式更新。
四、高級功能擴展
狀態(tài)持久化(示例)
安裝插件并配置:
npm install pinia-plugin-persistedstate
// main.js import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' pinia.use(piniaPluginPersistedstate)
在Store中啟用:
defineStore('counter', () => { /* ... */ }, {
persist: {
enabled: true, // 開啟持久化
storage: sessionStorage, // 可選存儲方式(默認localStorage)
paths: ['count'] // 指定需持久化的字段
}
})作用:瀏覽器刷新后自動恢復指定狀態(tài)。
模塊化開發(fā)
- 創(chuàng)建多個Store文件(如
userStore.js、cartStore.js) - 組件按需引入不同Store,實現(xiàn)邏輯解耦
五、調試技巧
Vue Devtools集成
安裝瀏覽器插件后,可查看Store狀態(tài)變化歷史與時間旅行調試。
自定義插件
可開發(fā)日志插件跟蹤狀態(tài)變更(示例見網頁4的日志監(jiān)控代碼)。
總結
通過以上步驟可實現(xiàn):
- ? 響應式狀態(tài)管理:基于Composition API的Store聲明
- ? 跨組件共享:多組件間高效同步復雜狀態(tài)
- ? 可維護性:模塊化Store設計與類型安全(天然支持TS)
- ? 擴展性:通過插件實現(xiàn)持久化、日志等高級功能
對比Vuex,Pinia的函數式Store語法更簡潔,且與Vue3的Composition API深度契合,推薦作為Vue3項目的首選狀態(tài)管理方案。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue指令之表單控件綁定v-model v-model與v-bind結合使用
這篇文章主要介紹了vue指令之表單控件綁定v-model v-model與v-bind結合使用,需要的朋友可以參考下2019-04-04
Vue3+Element-Plus?實現(xiàn)點擊左側菜單時顯示不同內容組件展示在Main區(qū)域功能
這篇文章主要介紹了Vue3+Element-Plus?實現(xiàn)點擊左側菜單時顯示不同內容組件展示在Main區(qū)域功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01
webpack 3 + Vue2 使用dotenv配置多環(huán)境的步驟
這篇文章主要介紹了webpack 3 + Vue2 使用dotenv配置多環(huán)境,env文件在配置文件都可以用, vue頁面用的時候需要在 webpack.base.conf.js 重新配置,需要的朋友可以參考下2023-11-11
vue如何使用vant組件的field組件disabled修改默認樣式
這篇文章主要介紹了vue如何使用vant組件的field組件disabled修改默認樣式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

