pinia-plugin-persistedstate的使用

pinia持久化存储的使用

安装

复制代码
npm install pinia-plugin-persistedstate

注册

复制代码
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)

export default pinia

使用

添加persist选项

复制代码
import { defineStore } from 'pinia'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    token: '',
    userInfo: null,
  }),
  actions: {
    // ...你的 actions
  },
  persist: true, // 启用持久化
})

高级用法

1. 部分状态持久化

typescript

复制

下载

复制代码
persist: {
  paths: ['token', 'userInfo.name'], // 只持久化 token 和 userInfo 的 name 属性
}

2. 自定义序列化

typescript

复制

下载

复制代码
persist: {
  serializer: {
    serialize: JSON.stringify,
    deserialize: JSON.parse,
  },
}

3. 使用 sessionStorage

typescript

复制

下载

复制代码
persist: {
  storage: sessionStorage,
}

4. 使用 Cookie

首先安装 js-cookie:

bash

复制

下载

复制代码
npm install js-cookie

然后在配置中使用:

typescript

复制

下载

复制代码
import Cookies from 'js-cookie'

persist: {
  storage: {
    getItem: (key) => Cookies.get(key),
    setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
    removeItem: (key) => Cookies.remove(key),
  },
}

全局默认配置

你可以在插件安装时设置全局默认配置:

typescript

复制

下载

复制代码
pinia.use(piniaPluginPersistedstate, {
  storage: sessionStorage,
  beforeRestore: (ctx) => {
    console.log(`即将恢复 ${ctx.store.$id}`)
  },
})

TypeScript 支持

为了获得完整的 TypeScript 支持,你可以在 tsconfig.json 中添加:

json

复制

下载

复制代码
{
  "compilerOptions": {
    "types": ["pinia-plugin-persistedstate"]
  }
}

注意事项

  1. 持久化大量数据可能会影响性能,建议只持久化必要的数据

  2. 敏感信息(如 token)应考虑加密存储

  3. 不同浏览器对 localStorage 的大小限制不同(通常约 5MB)

  4. 在 SSR 环境下使用时需要特别处理

相关推荐
USER_A00116 天前
【VUE3】练习项目——大事件后台管理
前端·vue.js·axios·pinia·elementplus·husky·vuerouter4
奶球不是球22 天前
vue3中pinia基本使用
vue.js·pinia
肉肉不吃 肉1 个月前
父子组件传递数据和状态管理数据
前端·javascript·vue.js·pinia
霸王蟹1 个月前
Pinia-构建用户仓库和持久化插件
前端·vue.js·笔记·ts·pinia·js
雪碧聊技术2 个月前
使用v-for用户菜单渲染
pinia·v-for·菜单渲染·mybatis查询·数据库表的设计
一雨方知深秋2 个月前
pnpm, eslint, vue-router4, element-plus, pinia
pnpm·pinia·element-plus·暂存区eslint·vue-router4
罗_三金3 个月前
(4)Vue 3 + Vite + Axios + Pinia + Tailwind CSS搭建一个基础框架
前端·css·vue.js·axios·pinia·tailwind
她和夏天一样热4 个月前
【前端系列】Pinia状态管理库
前端·axios·pinia
暂时先用这个名字6 个月前
vue3中mitt和pinia的区别和主要用途,是否有可重合的部分?
开发语言·javascript·vue.js·pinia·组件·通信·mitt