pinia数据持久化插件pinia-plugin-persistedstate的基础使用+vue3组合式,有手就会系列。

本文介绍了如何在Vue3项目中使用pinia-plugin-persistedstate进行状态持久化,包括安装、配置方法,以及不同情况下的单个和多个数据持久化策略。作者分享了两种state的全部数据持久化写法和处理局限性的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 🔮 欢迎点赞 👍٩( ´︶` )( ´︶` )۶ 收藏 🌟留言 💌 欢迎讨论!💕
🔮 本文由 【第四人称Alice】 原创,首发于 优快云 ✨✨✨
🌍 由于博主还属于前期的前端开发小白,欢迎大家留言提出更好的意见,大家共同进步!💭

首先附上官网地址,:快速开始 | pinia-plugin-persistedstate,有疑惑的宝子可以去看官网哦~

说明一下,博主使用的是v3.2.0版本,技术栈为vue3+ts,看了很多博主的持久化用法都不是自己想要的,最后自己扒官网写了最新的用法,废话不多说,马上开始。

一、安装

1、 安装pinia-plugin-persistedstate依赖🐋

npm i pinia-plugin-persistedstate

pnpm i pinia-plugin-persistedstate

yarn add pinia-plugin-persistedstate

2、安装压缩加密依赖🐋

 npm i zipson -S

 主要为了避免存储的数据量过大,导致数据结构被破坏以及数据被丢失问题。

二、配置

1、 main.ts文件🐋

import { createPinia } from "pinia";
import piniaPluginPersist from "pinia-plugin-persistedstate";

let app = createApp(App);
const pinia = createPinia();
app.use(pinia.use(piniaPluginPersist)).mount("#app");

 2、 store.ts文件🐋

①state中的全部数据持久化

写法一:

import { defineStore } from "pinia";
import { parse, stringify } from "zipson";
export const useStore = defineStore({
  id: "main",
  state: (): { token?: any; searchWord?: any; loginInfo?: any } => ({
    token: window.localStorage.getItem(import.meta.env.BASE_URL + "token") || "",
    searchWord: "",
    loginInfo: {},
  }),
  actions: {
    setToken(token: string) {
      this.token = token;
      window.localStorage.setItem(import.meta.env.BASE_URL + "token", token);
    },
    setLoginInfo(loginInfo: object) {
      this.loginInfo = loginInfo;
    },
    setSearchWord(word: any): void {
      this.searchWord = word;
    },
  },
 // 默认存储到本地,存储内容为state中的全部数据
  persist: true,

});

写法二:

export const useStore = defineStore("main", {
  state: (): { token?: any; searchWord?: any; loginInfo?: any } => {
    return {
      token: window.localStorage.getItem(import.meta.env.BASE_URL + "token") || "",
      searchWord: "",
      loginInfo: {},
    };
  },
  actions: {
    setToken(token: string) {
      this.token = token;
      window.localStorage.setItem(import.meta.env.BASE_URL + "token", token);
    },
    setLoginInfo(loginInfo: object) {
      this.loginInfo = loginInfo;
    },
    setSearchWord(word: any): void {
      this.searchWord = word;
    },
  },
  // 默认存储到本地,存储内容为state中的全部数据
  persist: true,
});

②单个持久化配置,缓存state中的单个数据

   persist: {
     key: "role",
     storage: sessionStorage,
     paths: ["loginInfo"],
     serializer: {
       deserialize: parse,
       serialize: stringify,
     },
   },

③单个持久化配置,缓存state中的多个数据

   persist: {
     key: "role",
     storage: sessionStorage,
     paths: ["loginInfo","token"],
     serializer: {
       deserialize: parse,
       serialize: stringify,
     },
   },

④多个持久化配置

  persist: [
    {
      key: "role",
      storage: sessionStorage,
      paths: ["loginInfo"],
      serializer: {
        deserialize: parse,
        serialize: stringify,
      },
    },
    {
      key: "message",
      storage: localStorage,
      paths: ["token", "searchWord"],
      serializer: {
        deserialize: parse,
        serialize: stringify,
      },
    },
  ],

3、配置项:🐋

官网:配置 | pinia-plugin-persistedstate

配置项

类型默认值参数解释
keystringstore.$id密钥名称
storageStorageLikelocalStorage存储方式
pathsstring['','',...]undefined被存储数据
serializerSerializerJSON.stringfy/JSON.parse用于将数据进行反序列化和序列化
beforeRestore

(context:PiniaPluginContext) => void

undefined该 hook 将在从 storage 中恢复数据之前触发
aftreRestore(context:PiniaPluginContext) => voidundefined该 hook 将在从 storage 中恢复数据之后触发
debugbooleanfalse输出错误

4、pinia-plugin-persistedstate插件的局限性🔕

①引用不会被持久化

②基本类型之外的将不会被持久化

③存储必须是同步的

目前解决办法参考官网:局限性 | pinia-plugin-persistedstate

后续博主在实际开发中使用到或者有空时继续填坑,感谢补充。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值