Vue狀態管理庫Pinia詳細介紹
什麼是 Pinia
Pinia (西班牙語中的菠蘿),本質上依然是一個狀態管理的庫,用於跨組件、頁面進行狀態共享.
pinia 與 vuex 的區別:
- 更友好的TypeScript支持,Vuex之前對TS的支持很不友好
- 與 Vuex 相比,Pinia 提供瞭一個更簡單的 API,具有更少的儀式,提供瞭 Composition-API 風格的 API
- 不再有modules的嵌套結構
- 也不再有命名空間的概念,不需要記住它們的復雜關系
如何使用 Pinia
安裝 pinia
yarn add pinia
創建一個pinia
// src/stores/index.js import { createPinia } from "pinia"; const pinia = createPinia() export default pinia
//main.js import pinia from './stores' app.use(pinia)
認識 Store
一個 Store (如 Pinia)是一個實體,它會持有為綁定到你組件樹的狀態和業務邏輯,也就是保存瞭全局的狀態
這樣就可以定義任意數量的Store來管理你的狀態,包括 state、getters、actions
定義一個store
- Store 是使用 defineStore() 定義的,
- 且它需要一個唯一名稱,作為第一個參數傳遞
使用 store
操作 State
state 是 store 的核心部分,store是用來實現我們管理狀態的。
- 方式一:直接一個個修改state
- 方式二:一次性修改多個狀態
- 方式三:替換state
- 方式四:重置state
Getters
1. 認識和定義 Getters
Getters相當於Store的計算屬性:
- 可以用 defineStore() 中的 getters 屬性定義;
- getters中可以定義接受一個state作為參數的函數;
2. 訪問 Getters
- 方式一:訪問當前 store 的Getters
- 方式二:Getters 中訪問自己的其他Getters
- 方式三:訪問其他的 store 的Getters
getters: { // 1. 基本使用 debouleCount(state) { return state.count * 2 }, // 2. 一個 getters 引入另外一個 getters useDebouleCount() { return this.debouleCount + 2 }, // 3. getter也支持返回一個函數 getFriendById(state) { return function (id) { for (let i = 0; i < state.vagetabel.length; i++) { const vagetabel = state.vagetabel[i] if (vagetabel.id === id) { return vagetabel } } } }, // 4.訪問其他store中的Getters showMessage(state) { // 獲取user信息 const useStore = useUser() // 獲取自己的state // 拼接信息 return `name:${useStore.name} - count:${state.count}` } }
認識和定義 Action
Action 可以理解成組件中的 methods ,和getters一樣,在action中可以通過this訪問整個store實例的所有操作。
Action 是支持異步操作的,所以可以使用 await。
到此這篇關於Vue狀態管理庫Pinia詳細介紹的文章就介紹到這瞭,更多相關Vue Pinia內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- vuex5中的Pinia插件機制
- 還在用vuex?來瞭解一下pinia
- Vue生態的新成員Pinia的詳細介紹
- vue3+pinia的快速入門使用教程
- 一文詳解Pinia和Vuex與兩個Vue狀態管理模式