淺析Vue專案中怎麼用Pinia狀態管理工具
Vue專案中怎麼用Pinia狀態管理工具?以下這篇文章帶大家聊聊Vue專案中Pinia狀態管理工具的使用,希望對大家有幫助!
Pinia官網介紹說:Pinia 是 Vue 的儲存庫,它允許您跨元件/頁面共享狀態。 Vuex同樣可以作為狀態管理工具,那麼兩者有什麼差別呢?
Pinia與Vuex的差異
- pinia只有store、getter、actions,麼有mutations,簡化了狀態管理的操作。 【相關推薦:vuejs影片教學、web前端開發】
- pinia模組分割不需要modules,
- pinia自動化程式碼分割
- pinia對ts支援很好以及vue3的composition API
- pinia體積更小,性能更好
使用Pinia
defineStore( )
方法的第一個參數:容器的名字,名字必須唯一,不能重複defineStore( )
方法的第二個參數:配置對象,放置state, getters,actionsstate
屬性: 用來儲存全域的狀態getters
屬性: 用來監視或是計算狀態的變化的,有快取的功能actions
屬性: 修改state全域狀態數據,可以是異步也可以是同步Pinia
可以用於vue2.x也可以用於vue3.x中
- 安裝
yarn add pinia -S
-
main.js
引入
import {createApp} from "vue" import App from "./app.vue" import store from "./store/index.js" const app = createApp(App); const store = createPinia(); app.use(store).mount("#app")
- 在store文件夾下新建test.js
import {definePinia} from "pinia" export default testStore = definePinia('testId',{ state:()=>{ tname:"test", tnum:0, }, getters:{ changeTnum(){ console.log("getters") this.tnum++; } }, actions:{ addNum(val){ this.tnum += val } }, //持久化存储配置 presist:{ enable:true,// strategies:[ { key:"testId", storage:localStorage, paths:['tnum'] } ] } })
在用actions的時候,不能使用箭頭函數,因為箭頭函數綁定是外部的this。 actions裡的this指向目前store
- 在store資料夾下新建index.js,以便於管理
import {createPinia} from "pinia" const store = createPinia(); export default store
- 新建
A.vue
元件,引入store模組和storeToRefs
方法storeToRefs
:解構store
中的數據,使之成為響應式數據
<template> <div> <div> {{tname}}</div> <div> {{tid}}</div> <div> tnum: {{tnum}}</div> <div> {{tchangeNum}}</div> <div><button @click="tchangeName">修改</button></div> <div> <button @click="treset">重置</button></div> <div @click="actionsBtn">actionsBtn</div> </div> </template>
<script setup> import { storeToRefs } from 'pinia' import { useStore } from '../store/user' import { useTest } from '../store/test.js' const testStore = useTest(); let { tname, tchangeNum, tnum } = storeToRefs(testStore) </script>
直接修改資料的兩種方式
直接修改資料與使用$path
修改資料相比,官方已經明確表示$patch
的方式是經過最佳化的,會加快修改速度,對程式的效能有很大的好處。所以如果你是多條數據同時更新狀態數據,建議使用$patch
方式更新。
雖然可以直接修改,但是出於程式碼結構來說, 全域的狀態管理還是不要直接在各個元件隨意修改狀態,應放於actions
中統一方法修改(piain沒有mutation) 。
//直接修改数据 tchangeName(){ tname.value = "测试数据"; tnum.value++; } //当然也可以使用`$path`批量修改 tchangeName(){ testStore.$path(state=>{ state.tname = "测试数据"; state.value = 7; }) }
使用actions修改資料
直接呼叫actions
中的方法,可傳參數
const actionsBtn = (){ testStore.addNum(5) }
重設state中資料
store
中有$reset
方法,可以直接對store
中資料重設
const treset = (){ testStore.$reset() }
Pinia持久化儲存
- 實現持久化存儲,需要配合以下插件使用
yarn add pinia-plugin-persist
- 配置
store
資料夾下的index.js
文件,引入pinia-plugin-presist
插件
import {createPinia} from "pinia" import piniaPluginPresist from "pinia-plugin-presist" const store = createPinia(); store.use(piniaPluginPresist) export default store
- 設定stroe資料夾下的test.js文件,使用
presist
屬性進行配置
import {definePinia} from "pinia" export default testStore = definePinia('testId',{ state:()=>{ tname:"test", tnum:0, }, getters:{ changeTnum(){ console.log("getters") this.tnum++; } }, actions:{ addNum(val){ this.tnum += val } }, //持久化存储配置 presist:{ enable:true,// strategies:[ { key:"testId", storage:localStorage, paths:['tnum'] } ] } })
enable:true
,開啟持久化存儲,預設為使用sessionStorage
存儲
-strategies
,進行更多配置
-key
,不設定key時,storage的key為definePinia
的第一個屬性,設定key值,則自訂storage的屬性名稱storage:localStorage
,設定快取模式為本機儲存paths
,不設定時對state
中的所用資料進行持久化存執,設定時只針對設定的屬性進行持久化儲存
Pinia模組化實作
模組化實作即在store對要使用的模組新建一個js文件,例如user.js
檔。然後配置內容跟其他模組一樣,根據自己需求進行設置,然後在對應頁面引入。
Pinia中store之間互相呼叫
例如:test.js
取得user.js
中 state
的name
屬性值,在test.js
引入user.js
import { defineStore } from 'pinia' import { userStore } from "./user.js" export const useTest = defineStore("testId", { state: () => { return { tid: "111", tname: "pinia", tnum: 0 } }, getters: { tchangeNum() { console.log('getters') return this.tnum + 100 } }, actions: { tupNum(val) { console.log('actions') this.tnum += val; }, getUserData() { console.log(useStore().name); return useStore().name; }, }, persist: { //走的session enabled: true, strategies: [ { key: "my_testId", storage: localStorage, paths: ['tnum'] } ] } })
user.js
中
import { defineStore } from 'pinia' export const useStore = defineStore('storeId', { state: () => { return { num: 0, name: '张三' } } })
A.vue
元件中,呼叫test.js
中getUserData
方法就可以得到uesr.js
中的name
值
const actionBtn = () => { testStore.getUserData() };
(学习视频分享:编程基础视频)
以上是淺析Vue專案中怎麼用Pinia狀態管理工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 <script> 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 <router-link to="/"> 組件window.history.back(),方法選擇取決於場景。

可以通過以下方法查詢 Vue 版本:使用 Vue Devtools 在瀏覽器的控制台中查看“Vue”選項卡。使用 npm 運行“npm list -g vue”命令。在 package.json 文件的“dependencies”對像中查找 Vue 項。對於 Vue CLI 項目,運行“vue --version”命令。檢查 HTML 文件中引用 Vue 文件的 <script> 標籤中的版本信息。

向 Vue.js 函數傳遞參數有兩種主要方法:使用插槽傳遞數據或使用 bind 綁定函數,並提供參數:使用插槽傳遞參數:在組件模板中傳遞數據,在組件內訪問並用作函數的參數。使用 bind 綁定傳遞參數:在 Vue.js 實例中綁定函數,並提供函數參數。
