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(函數(shù)式寫法)
使用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
第一個參數(shù)為Store唯一ID(需全局唯一)- 使用
ref
/computed
等響應式API管理狀態(tài) - 通過函數(shù)返回值暴露需共享的狀態(tài)與方法
- 注意這個的id和實際沒什么關系,你最后還是使用useCounterStore 來獲取對象
三、在組件中使用Store
引入Store實例
在組件<script setup>
中調(diào)用Store:
<script setup> import { useCounterStore } from '@/stores/counter' const counterStore = useCounterStore() // 實例化Store </script>
特性:Store按需實例化,支持多組件復用且狀態(tài)自動同步。
模板中訪問狀態(tài)與方法
<template> <div> <p>當前計數(shù):{{ counterStore.count }}</p> <p>雙倍計數(shù):{{ 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)邏輯解耦
五、調(diào)試技巧
Vue Devtools集成
安裝瀏覽器插件后,可查看Store狀態(tài)變化歷史與時間旅行調(diào)試。
自定義插件
可開發(fā)日志插件跟蹤狀態(tài)變更(示例見網(wǎng)頁4的日志監(jiān)控代碼)。
總結
通過以上步驟可實現(xiàn):
- ? 響應式狀態(tài)管理:基于Composition API的Store聲明
- ? 跨組件共享:多組件間高效同步復雜狀態(tài)
- ? 可維護性:模塊化Store設計與類型安全(天然支持TS)
- ? 擴展性:通過插件實現(xiàn)持久化、日志等高級功能
對比Vuex,Pinia的函數(shù)式Store語法更簡潔,且與Vue3的Composition API深度契合,推薦作為Vue3項目的首選狀態(tài)管理方案。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue指令之表單控件綁定v-model v-model與v-bind結合使用
這篇文章主要介紹了vue指令之表單控件綁定v-model v-model與v-bind結合使用,需要的朋友可以參考下2019-04-04Vue3+Element-Plus?實現(xiàn)點擊左側菜單時顯示不同內(nèi)容組件展示在Main區(qū)域功能
這篇文章主要介紹了Vue3+Element-Plus?實現(xiàn)點擊左側菜單時顯示不同內(nèi)容組件展示在Main區(qū)域功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01webpack 3 + Vue2 使用dotenv配置多環(huán)境的步驟
這篇文章主要介紹了webpack 3 + Vue2 使用dotenv配置多環(huán)境,env文件在配置文件都可以用, vue頁面用的時候需要在 webpack.base.conf.js 重新配置,需要的朋友可以參考下2023-11-11vue 標簽屬性數(shù)據(jù)綁定和拼接的實現(xiàn)方法
這篇文章主要介紹了vue 標簽屬性數(shù)據(jù)綁定和拼接的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05vue如何使用vant組件的field組件disabled修改默認樣式
這篇文章主要介紹了vue如何使用vant組件的field組件disabled修改默認樣式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05