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 环境下使用时需要特别处理

相关推荐
吴声子夜歌15 小时前
Vue3——Pinia状态管理
javascript·vue.js·pinia
曲幽16 天前
Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看
vue3·inject·provide·pinia·v-model·props·mitt·emit
travel_wsy24 天前
vue Pinia 状态管理库
前端·pinia
Irene19911 个月前
Vue 2、Vue 3 、Vuex 3、Vuex 4 和 Pinia 响应式丢失场景及解决方案
vue·pinia·vuex
SuperEugene1 个月前
Vue3 Pinia 状态管理规范:状态拆分、Actions 写法、持久化实战,避坑状态污染|状态管理与路由规范篇
前端·javascript·vue.js·前端框架·pinia
optimistic_chen1 个月前
【Vue3入门】Pinia 状态管理 和 ElementPlus组件库
前端·javascript·vue.js·elementui·pinia·组件
Irene19911 个月前
Vuex版本演进与核心特性对比(附:Vuex 4 与 Pinia 核心区别对比)
pinia·vuex·数据流
Irene19911 个月前
对比总结:Vue3中的 watch 和 Pinia中的 $subscribe
vue.js·pinia·watch·subscribe
这是个栗子1 个月前
【Vue3项目】电商前台项目(四)
前端·vue.js·pinia·表单校验·面包屑导航
还是大剑师兰特2 个月前
Pinia在Vue3中的应用部署与使用,包括持久化方案
pinia·大剑师