亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue3+Vite項目中引入pinia和pinia-plugin-persistedstate的方法代碼

 更新時間:2024年11月22日 08:27:05   作者:九月兒  
這篇文章主要給大家介紹了關(guān)于Vue3+Vite項目中引入pinia和pinia-plugin-persistedstate的相關(guān)資料,Pinia是Vue.js的官方狀態(tài)管理庫,輕量且功能強大,支持模塊化和TypeScript,PiniaPluginPersistedState是一個插件,需要的朋友可以參考下

一、Pinia

1. 簡介

Pinia 是 Vue.js 官方推薦的狀態(tài)管理庫,是 Vuex 的輕量替代品,設(shè)計更簡單、功能更強大,并且支持模塊化和 TypeScript。

2. Pinia 的主要特點

  • 簡單易用:

    API 設(shè)計直觀,與 Vue Composition API 深度結(jié)合。

  • 支持模塊化:

    每個 store 獨立管理,減少全局 store 復(fù)雜性。

  • 熱更新:

    支持 HMR(Hot Module Replacement),開發(fā)時無需手動刷新。

  • 支持 TypeScript:

    提供更好的類型推導(dǎo)和代碼提示。

  • 無依賴:

    不需要額外的插件或中間件,集成更輕松。

二、Pinia Plugin PersistedState

1. 簡介

pinia-plugin-persistedstate 是 Pinia 的一個插件,用于持久化存儲狀態(tài)。它將 store 的狀態(tài)保存在 localStorage 或 sessionStorage 中,即使頁面刷新或關(guān)閉后再次打開,狀態(tài)依然會被恢復(fù)。

2. 插件特點

  • 支持存儲到 localStorage 或 sessionStorage。
  • 可選擇性持久化某些 store 或字段。
  • 集成簡單,自動同步狀態(tài)。
  • 支持自定義序列化(如 JSON)和反序列化邏輯。

3. PersistedState 配置項

persist 字段用于配置持久化存儲的策略。

常見配置項

配置項類型默認值描述
enabledbooleanfalse是否啟用持久化存儲。
keystringStore 名稱存儲在 Storage 中的鍵名。
storageStoragelocalStorage存儲方式,可選 localStorage 或 sessionStorage。
pathsstring[]undefined選擇性持久化某些字段(不設(shè)置則默認存儲全部)。
serializerobject內(nèi)置 JSON 序列化器自定義序列化器,包括 serialize 和 deserialize。

4. 示例:選擇性持久化字段

如果只想持久化 name 字段:

persist: {
  enabled: true,
  strategies: [
    {
      key: 'user',
      storage: localStorage,
      paths: ['name'], // 只持久化 `name`
    },
  ],
},

5. 示例:自定義序列化器

如果需要自定義存儲格式(如 Base64):

persist: {
  enabled: true,
  strategies: [
    {
      key: 'user',
      storage: sessionStorage,
      serializer: {
        serialize: (value) => btoa(JSON.stringify(value)), // Base64 編碼
        deserialize: (value) => JSON.parse(atob(value)),  // Base64 解碼
      },
    },
  ],
},

三、如何在項目中使用 Pinia 和 PersistedState

1. 安裝 Pinia 和 PersistedState 插件

npm install pinia pinia-plugin-persistedstate

2. 配置 Pinia

在項目的入口文件(如 main.ts 或 main.js)中:

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import piniaPluginPersistedState from 'pinia-plugin-persistedstate';
import App from './App.vue';

const app = createApp(App);

// 創(chuàng)建 Pinia 實例
const pinia = createPinia();

// 使用持久化插件
pinia.use(piniaPluginPersistedState);

app.use(pinia);
app.mount('#app');

3. 創(chuàng)建 Store

創(chuàng)建一個持久化的 Pinia store,例如 src/stores/user.ts:

import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', () => {
  const name = ref('王強')
  const age = ref(25)
  function setName(name: string) {
	name.value = name
  }
  return {
  	name,
  	age,
  	setName
  }
}, 
  {
    persist: {
      storage: sessionStorage
    }
  }
)

4. 使用 Store

1. 讀取

<template>
  <div>
    <p>用戶名:{{ userStore.name }}</p>
    <button @click="updateName">修改用戶名</button>
  </div>
</template>

<script lang="ts" setup>
import { useUserStore } from '@/stores/user';
const userStore = useUserStore();

const updateName = () => {
  userStore.setName('張三');
};
</script>

2. 更新

// 直接修改
userStore.name = '張三'

// 通過 $patch({}) 批量對象修改
userStore.$patch({
 name: '張三',
 age:19
})

// 通過 $patch((state) => {}) 回調(diào)函數(shù)修改
userStore.$patch((state) => {
    state.name = '張三'
    state.age = 19
})

// 通過 action 修改
userStore.setName('張三');

3. 重置

將 store 中 state 重置為初始值

userStore.$reset()

4. 解構(gòu) storeToRefs

解構(gòu)會丟失響應(yīng)式,需要用 storeToRefs 轉(zhuǎn)為響應(yīng)式

import { storeToRefs } from 'pinia'
const userStore = useUsersStore()
const { name } = storeToRefs(userStore)

5. 監(jiān)聽 state 變化

監(jiān)聽state變化

/**
 * 當(dāng) state 中的值任意一個發(fā)生變化的時候,就會觸發(fā)該函數(shù)
 * 
 * args: 里面會記錄新舊值
 * state:就是當(dāng)前操作的 state 的實例
 * options: 是一個對象,比如 detached,這是一個 boolean 參數(shù),當(dāng)這個參數(shù)為 true 時,表明即使當(dāng)前組件銷毀后,也繼續(xù)監(jiān)控 state 里面值的變化,可選
 */
 userStore.$subscribe((args, state) => {
  console.log('args', args)
  console.log('state', state)
},{
  detached: true
})

6. 監(jiān)聽 action 調(diào)用

當(dāng)調(diào)用函數(shù)的時候,就會觸發(fā)該函數(shù)

/**
 * 當(dāng)調(diào)用 actions 里面的函數(shù)的時候,就會觸發(fā)改函數(shù)
 *
 * args:接收參數(shù),里面封裝了多個 api:
 *      args.after:當(dāng) $onAction 里面的邏輯執(zhí)行完成之后才會執(zhí)行 args.after 函數(shù)邏輯,所以 args.after 放置的位置于執(zhí)行順序無關(guān)
 *      args.onError:當(dāng)調(diào)用 actions 里面的函數(shù)發(fā)生錯誤時,args.onError 函數(shù)也會執(zhí)行
 *      args.args:接收調(diào)用 actions 里面的函數(shù)傳遞的參數(shù),是一個數(shù)組
 *      args.name:執(zhí)行的 actions 里面的函數(shù)的名稱
 * detached: 這是一個 boolean 參數(shù),當(dāng)這個參數(shù)為 true 時,表明即使當(dāng)前組件銷毀時,也繼續(xù)監(jiān)控 actions 里面的函數(shù)調(diào)用,可選
 */
userStore.$onAction((args) => {
    args.after(() => console.log("args.after", "===="));
    console.log("args", args);
}, true);

總結(jié)

到此這篇關(guān)于Vue3+Vite項目中引入pinia和pinia-plugin-persistedstate的文章就介紹到這了,更多相關(guān)Vue3+Vite引入pinia和pinia-plugin-persistedstate內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue tagsview實現(xiàn)多頁簽導(dǎo)航功能流程詳解

    Vue tagsview實現(xiàn)多頁簽導(dǎo)航功能流程詳解

    基本上后臺管理系統(tǒng)都需要有多頁簽的功能,但是因為一些腳手架項目基本都把這個功能給集成好了,導(dǎo)致在學(xué)習(xí)或者修改的時候不知道該如何下手。今天這篇文章就來聊一聊,vue-element-admin項目是如何實現(xiàn)多頁簽功能的
    2022-09-09
  • 利用Vue3實現(xiàn)鼠標跟隨效果

    利用Vue3實現(xiàn)鼠標跟隨效果

    在Web開發(fā)領(lǐng)域,鼠標跟隨效果是一種能顯著提升頁面交互性、增加動態(tài)感與趣味性的常見方式,下面我們看看如何使用Vue3實現(xiàn)鼠標跟隨效果吧
    2024-11-11
  • vue-cli構(gòu)建的項目如何手動添加eslint配置

    vue-cli構(gòu)建的項目如何手動添加eslint配置

    這篇文章主要介紹了vue-cli構(gòu)建的項目如何手動添加eslint配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue組件之全局組件與局部組件的使用詳解

    Vue組件之全局組件與局部組件的使用詳解

    本篇文章主要介紹了Vue組件之全局組件與局部組件的使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 完美解決vue中報錯?“TypeError:?Cannot?read?properties?of?null?(reading'forEach')“

    完美解決vue中報錯?“TypeError:?Cannot?read?properties?of?null?

    這篇文章主要介紹了完美解決vue中報錯?“TypeError:?Cannot?read?properties?of?null?(reading?‘forEach‘)“,本文給大家分享詳細解決方案,需要的朋友可以參考下
    2023-02-02
  • Vue項目發(fā)布后瀏覽器緩存問題解決方案

    Vue項目發(fā)布后瀏覽器緩存問題解決方案

    在vue項目開發(fā)中一直有一個令人都疼的問題,就是緩存問題,這篇文章主要給大家介紹了關(guān)于Vue項目發(fā)布后瀏覽器緩存問題的解決方案,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • VUE異步更新DOM - 用$nextTick解決DOM視圖的問題

    VUE異步更新DOM - 用$nextTick解決DOM視圖的問題

    這篇文章主要介紹了VUE異步更新DOM - 用$nextTick解決DOM視圖的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue從倉庫state中取不到數(shù)據(jù)的問題

    vue從倉庫state中取不到數(shù)據(jù)的問題

    這篇文章主要介紹了vue從倉庫state中取不到數(shù)據(jù)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3中reactive與ref函數(shù)使用場景

    Vue3中reactive與ref函數(shù)使用場景

    這篇文章主要為大家介紹了Vue3?中有場景是?reactive?能做而?ref?做不了的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • vue實現(xiàn)路由鑒權(quán)和不同用戶登錄

    vue實現(xiàn)路由鑒權(quán)和不同用戶登錄

    這篇文章主要為大家詳細介紹了vue中實現(xiàn)路由鑒權(quán)和不同用戶登錄的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04

最新評論