最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3+Vite項(xiàng)目中引入pinia和pinia-plugin-persistedstate的方法代碼

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

一、Pinia

1. 簡介

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

2. Pinia 的主要特點(diǎn)

  • 簡單易用:

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

  • 支持模塊化:

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

  • 熱更新:

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

  • 支持 TypeScript:

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

  • 無依賴:

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

二、Pinia Plugin PersistedState

1. 簡介

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

2. 插件特點(diǎn)

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

3. PersistedState 配置項(xiàng)

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

常見配置項(xiàng)

配置項(xiàng)類型默認(rèn)值描述
enabledbooleanfalse是否啟用持久化存儲。
keystringStore 名稱存儲在 Storage 中的鍵名。
storageStoragelocalStorage存儲方式,可選 localStorage 或 sessionStorage。
pathsstring[]undefined選擇性持久化某些字段(不設(shè)置則默認(rèn)存儲全部)。
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 解碼
      },
    },
  ],
},

三、如何在項(xiàng)目中使用 Pinia 和 PersistedState

1. 安裝 Pinia 和 PersistedState 插件

npm install pinia pinia-plugin-persistedstate

2. 配置 Pinia

在項(xiàng)目的入口文件(如 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 實(shí)例
const pinia = createPinia();

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

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

3. 創(chuàng)建 Store

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

import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', () => {
  const name = ref('王強(qiáng)')
  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 中的值任意一個(gè)發(fā)生變化的時(shí)候,就會觸發(fā)該函數(shù)
 * 
 * args: 里面會記錄新舊值
 * state:就是當(dāng)前操作的 state 的實(shí)例
 * options: 是一個(gè)對象,比如 detached,這是一個(gè) boolean 參數(shù),當(dāng)這個(gè)參數(shù)為 true 時(shí),表明即使當(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ù)的時(shí)候,就會觸發(fā)該函數(shù)

/**
 * 當(dāng)調(diào)用 actions 里面的函數(shù)的時(shí)候,就會觸發(fā)改函數(shù)
 *
 * args:接收參數(shù),里面封裝了多個(gè) 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ā)生錯(cuò)誤時(shí),args.onError 函數(shù)也會執(zhí)行
 *      args.args:接收調(diào)用 actions 里面的函數(shù)傳遞的參數(shù),是一個(gè)數(shù)組
 *      args.name:執(zhí)行的 actions 里面的函數(shù)的名稱
 * detached: 這是一個(gè) boolean 參數(shù),當(dāng)這個(gè)參數(shù)為 true 時(shí),表明即使當(dāng)前組件銷毀時(shí),也繼續(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項(xiàng)目中引入pinia和pinia-plugin-persistedstate的文章就介紹到這了,更多相關(guān)Vue3+Vite引入pinia和pinia-plugin-persistedstate內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-cli項(xiàng)目使用mock數(shù)據(jù)的方法(借助express)

    vue-cli項(xiàng)目使用mock數(shù)據(jù)的方法(借助express)

    現(xiàn)如今前后端分離開發(fā)越來越普遍,前端人員寫好頁面后可以自己模擬一些數(shù)據(jù)進(jìn)行代碼測試,這樣就不必等后端接口,提高了我們開發(fā)效率。今天就來分析下前端常用的mock數(shù)據(jù)的方式是如何實(shí)現(xiàn)的,需要的朋友可以參考下
    2019-04-04
  • Vue3+Ant?design?實(shí)現(xiàn)Select下拉框一鍵全選/清空功能

    Vue3+Ant?design?實(shí)現(xiàn)Select下拉框一鍵全選/清空功能

    在做后臺管理系統(tǒng)項(xiàng)目的時(shí)候,產(chǎn)品增加了一個(gè)在Select選擇器中添加一鍵全選和清空的功能,他又不讓在外部增加按鈕,其實(shí)如果說在外部增加按鈕實(shí)現(xiàn)全選或者清空的話,功能比較簡單的,下面給大家分享Vue3+Ant?design?實(shí)現(xiàn)Select下拉框一鍵全選/清空功能,需要的朋友可以參考下
    2024-05-05
  • Vue?項(xiàng)目的成功發(fā)布和部署的實(shí)現(xiàn)

    Vue?項(xiàng)目的成功發(fā)布和部署的實(shí)現(xiàn)

    本文主要介紹了Vue?項(xiàng)目的成功發(fā)布和部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • vue 解決兄弟組件、跨組件深層次的通信操作

    vue 解決兄弟組件、跨組件深層次的通信操作

    這篇文章主要介紹了vue 解決兄弟組件、跨組件深層次的通信操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 使用Vue3生成二維碼和條形碼詳細(xì)圖文教程

    使用Vue3生成二維碼和條形碼詳細(xì)圖文教程

    在Vue項(xiàng)目和微信小程序中生成二維碼和條形碼是一個(gè)常見的需求,主要用于分享、產(chǎn)品識別等場景,這篇文章主要給大家介紹了關(guān)于使用Vue3生成二維碼和條形碼的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • Vue2.0用戶權(quán)限控制解決方案

    Vue2.0用戶權(quán)限控制解決方案

    這篇文章主要介紹了Vue2.0用戶權(quán)限控制解決方法以及源碼說明,一起學(xué)習(xí)下。
    2017-11-11
  • web面試vue自定義組件及調(diào)用方式

    web面試vue自定義組件及調(diào)用方式

    這篇文章主要介紹了web面試中常問到的關(guān)于vue自定義組件及調(diào)用方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-09-09
  • vue封裝自定義指令之動態(tài)顯示title操作(溢出顯示,不溢出不顯示)

    vue封裝自定義指令之動態(tài)顯示title操作(溢出顯示,不溢出不顯示)

    這篇文章主要介紹了vue封裝自定義指令之動態(tài)顯示title操作(溢出顯示,不溢出不顯示),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue實(shí)現(xiàn)文字滾動效果

    vue實(shí)現(xiàn)文字滾動效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)文字滾動效果,公告滾動播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue中引入路徑@的用法及說明

    vue中引入路徑@的用法及說明

    這篇文章主要介紹了vue中引入路徑@的用法及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

和静县| 桂阳县| 青岛市| 呼图壁县| 利川市| 郎溪县| 原阳县| 德惠市| 元谋县| 彭泽县| 荣昌县| 成安县| 龙泉市| 思南县| 沧州市| 南皮县| 威宁| 兴和县| 松溪县| 西峡县| 蕉岭县| 全椒县| 兴海县| 绥阳县| 电白县| 上栗县| 沁源县| 保定市| 雅江县| 拜泉县| 竹北市| 五莲县| 大城县| 尼玛县| 雅江县| 正蓝旗| 湘乡市| 塘沽区| 松潘县| 故城县| 宁阳县|