vue3使用Pinia的store的組件化開發(fā)模式詳解
一、安裝與初始化
安裝Pinia
npm install pinia # 或 yarn add pinia
目的:引入Pinia核心庫,為狀態(tài)管理提供基礎(chǔ)支持。
掛載Pinia實(shí)例
在main.js中初始化并注入Vue應(yīng)用:
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia) // 關(guān)鍵!全局啟用Pinia
app.mount('#app')作用:創(chuàng)建Pinia實(shí)例并與Vue3應(yīng)用集成,使所有組件可訪問Store。
二、創(chuàng)建Store(函數(shù)式寫法)
使用Composition API風(fēng)格定義Store(推薦):
// stores/counter.js
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useCounterStore = defineStore('counter', () => {
// 1. 定義狀態(tài)(相當(dāng)于data)
const count = ref(0)
// 2. 定義計(jì)算屬性(相當(dāng)于getters)
const doubleCount = computed(() => count.value * 2)
// 3. 定義操作方法(相當(dāng)于actions)
function increment() {
count.value++
}
// 暴露狀態(tài)與方法
return { count, doubleCount, increment }
})核心要點(diǎn):
defineStore第一個(gè)參數(shù)為Store唯一ID(需全局唯一)- 使用
ref/computed等響應(yīng)式API管理狀態(tài) - 通過函數(shù)返回值暴露需共享的狀態(tài)與方法
- 注意這個(gè)的id和實(shí)際沒什么關(guān)系,你最后還是使用useCounterStore 來獲取對(duì)象
三、在組件中使用Store
引入Store實(shí)例
在組件<script setup>中調(diào)用Store:
<script setup>
import { useCounterStore } from '@/stores/counter'
const counterStore = useCounterStore() // 實(shí)例化Store
</script>特性:Store按需實(shí)例化,支持多組件復(fù)用且狀態(tài)自動(dòng)同步。
模板中訪問狀態(tài)與方法
<template>
<div>
<p>當(dāng)前計(jì)數(shù):{{ counterStore.count }}</p>
<p>雙倍計(jì)數(shù):{{ counterStore.doubleCount }}</p>
<button @click="counterStore.increment()">+1</button>
</div>
</template>響應(yīng)式原理:直接訪問Store的屬性會(huì)觸發(fā)Vue的響應(yīng)式更新。
四、高級(jí)功能擴(kuò)展
狀態(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, // 可選存儲(chǔ)方式(默認(rèn)localStorage)
paths: ['count'] // 指定需持久化的字段
}
})作用:瀏覽器刷新后自動(dòng)恢復(fù)指定狀態(tài)。
模塊化開發(fā)
- 創(chuàng)建多個(gè)Store文件(如
userStore.js、cartStore.js) - 組件按需引入不同Store,實(shí)現(xiàn)邏輯解耦
五、調(diào)試技巧
Vue Devtools集成
安裝瀏覽器插件后,可查看Store狀態(tài)變化歷史與時(shí)間旅行調(diào)試。
自定義插件
可開發(fā)日志插件跟蹤狀態(tài)變更(示例見網(wǎng)頁4的日志監(jiān)控代碼)。
總結(jié)
通過以上步驟可實(shí)現(xiàn):
- ? 響應(yīng)式狀態(tài)管理:基于Composition API的Store聲明
- ? 跨組件共享:多組件間高效同步復(fù)雜狀態(tài)
- ? 可維護(hù)性:模塊化Store設(shè)計(jì)與類型安全(天然支持TS)
- ? 擴(kuò)展性:通過插件實(shí)現(xiàn)持久化、日志等高級(jí)功能
對(duì)比Vuex,Pinia的函數(shù)式Store語法更簡(jiǎn)潔,且與Vue3的Composition API深度契合,推薦作為Vue3項(xiàng)目的首選狀態(tài)管理方案。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目因內(nèi)存溢出啟動(dòng)報(bào)錯(cuò)的解決方案
這篇文章主要介紹了vue項(xiàng)目因內(nèi)存溢出啟動(dòng)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
vue指令之表單控件綁定v-model v-model與v-bind結(jié)合使用
這篇文章主要介紹了vue指令之表單控件綁定v-model v-model與v-bind結(jié)合使用,需要的朋友可以參考下2019-04-04
Vue3+Element-Plus?實(shí)現(xiàn)點(diǎn)擊左側(cè)菜單時(shí)顯示不同內(nèi)容組件展示在Main區(qū)域功能
這篇文章主要介紹了Vue3+Element-Plus?實(shí)現(xiàn)點(diǎn)擊左側(cè)菜單時(shí)顯示不同內(nèi)容組件展示在Main區(qū)域功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
運(yùn)行npm?run?dev報(bào)錯(cuò)的原因及解決
剛剛創(chuàng)建好vue項(xiàng)目的時(shí)候,運(yùn)行 npm run dev 會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于運(yùn)行npm?run?dev報(bào)錯(cuò)的原因及解決方法,需要的朋友可以參考下2022-10-10
Vue實(shí)現(xiàn)跑馬燈樣式文字橫向滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)跑馬燈樣式文字橫向滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
webpack 3 + Vue2 使用dotenv配置多環(huán)境的步驟
這篇文章主要介紹了webpack 3 + Vue2 使用dotenv配置多環(huán)境,env文件在配置文件都可以用, vue頁面用的時(shí)候需要在 webpack.base.conf.js 重新配置,需要的朋友可以參考下2023-11-11
vue 標(biāo)簽屬性數(shù)據(jù)綁定和拼接的實(shí)現(xiàn)方法
這篇文章主要介紹了vue 標(biāo)簽屬性數(shù)據(jù)綁定和拼接的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
vue實(shí)現(xiàn)消息列表向上無縫滾動(dòng)效果
本文主要實(shí)現(xiàn)vue項(xiàng)目中,消息列表逐條向上無縫滾動(dòng),每條消息展示10秒后再滾動(dòng),為了保證用戶能看清消息主題,未使用第三方插件,本文實(shí)現(xiàn)方法比較簡(jiǎn)約,需要的朋友可以參考下2024-06-06
vue+elementUl導(dǎo)入文件方式(判斷文件格式)
這篇文章主要介紹了vue+elementUl導(dǎo)入文件方式(判斷文件格式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue如何使用vant組件的field組件disabled修改默認(rèn)樣式
這篇文章主要介紹了vue如何使用vant組件的field組件disabled修改默認(rèn)樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

