vue3 中 pinia 数据持久化配置使用sessionStorage

❤️砥砺前行,不负余光,永远在路上❤️

前言

现在,Vue 的官方状态管理库已更改为 Pinia,它由 Vue 核心团队维护,Vue 官方推荐使用 Pinia

一、Pinia的使用

参考https://juejin.cn/post/7159964121243811877

二、Pinia数据持久化

借助 pinia-plugin-persistedstate

1、安装pinia-plugin-persistedstate

npm i pinia-plugin-persistedstate
//or
cnpm i pinia-plugin-persistedstate
//or
yarn add pinia-plugin-persistedstate

2、在main.js中引用


import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
const app = createApp(App);
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate);//pinia数据持久化
app.use(pinia).mount('#app')

3、修改store

主要是 persist:true 这一行会默认存储数据到localStorage中,键名默认为store设置的id


import { defineStore } from "pinia";
export const linkonStore = defineStore({
    id: 'demo',
    state: () => {
        return {
            token: '',
            userInfo: '',
        }
    },
    getters: {
        getUserInfo (state) {
            return state.userInfo
        },
    },
    actions: {
        changeUserInfo (userInfo) {
            this.userInfo = userInfo
        },
    },
    // 开启数据持久化
    persist:true,
})

4、修改持久化存储位置

将persist:true改为如下配置就是直接存储在sessionStorage,键名为demo

persist:{
        enabled:true,
        key:"demo",
        storage:sessionStorage,
 }

5、其他配置

persist: {
  key: 'my-custom-key',
  storage: sessionStorage,
  paths: ['count'],
  serializer: {
    deserialize: parse,
    serialize: stringify
  },
  beforeRestore: (ctx) => {
    console.log(`about to restore '${ctx.store.$id}'`)
  },
  afterRestore: (ctx) => {
    console.log(`just restored '${ctx.store.$id}'`)
  },
  debug: true,
},
  1. key: 用于引用存储中存储的反序列化数据的密钥。
  2. storage: 将数据持久保存到的存储类型。必须有 getItem: (key: string) => string | null 和 setItem: (key: string, value: string) => void 方法。
  3. paths: 持久化属性数组。 [] 表示没有状态被持久化, undefined 或 null 表示整个状态被持久化。
  4. serializer: 自定义序列化程序在持久化数据之前序列化数据,并在重新水化存储之前反序列化数据。必须同时有 serialize: (value: StateTree) => string 和 deserialize: (value: string) => StateTree 方法。
  5. beforeRestore: 钩子函数在恢复持久状态之前运行。该钩子可以访问整个 PiniaPluginContext。这可用于在水合之前强制执行特定操作。
  6. afterRestore: 钩子函数在恢复持久状态后运行。该钩子可以访问整个 PiniaPluginContext。这可用于在水合后强制执行特定操作。
  7. debug: 设置为 true 时,在持久化/水合存储时可能发生的任何错误都将记录为 console.error。

参考:https://juejin.cn/post/7159964121243811877

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Pinia 是一个基于 Vue3 的状态管理库,它本身并没有提供数据持久化的功能。不过可以借助其他库来实现数据持久化,比如 `localStorage`、`sessionStorage`、IndexedDB 等。 下面以 `localStorage` 为例,介绍如何在 Pinia 实现数据持久化。 首先需要安装 `@vueuse/core` 库: ``` npm install @vueuse/core ``` 然后,在创建 Pinia 实例之前,通过 `useStorage` 方法创建一个本地存储实例: ```javascript import { createPinia } from 'pinia' import { useStorage } from '@vueuse/core' const localStorage = useStorage('my-app') const pinia = createPinia() // 在创建 store 时,使用本地存储实例作为插件 pinia.use(({ store }) => { store.$subscribe((mutation) => { localStorage.setItem(mutation.type, JSON.stringify(mutation.payload)) }) }) ``` 在上面的代码,我们通过 `useStorage` 方法创建了一个名为 `my-app` 的本地存储实例,并在创建 Pinia 实例后,通过 `pinia.use` 方法将其作为插件使用。每次 state 发生变化时,我们将变化的内容以 JSON 格式保存到本地存储。 如果需要在应用初始化时将本地存储数据还原到 state ,可以在 store 添加一个 `init` 方法: ```javascript const store = defineStore({ id: 'myStore', state: () => ({ count: 0 }), actions: { init() { Object.keys(localStorage).forEach((key) => { this.$patch({ [key]: JSON.parse(localStorage.getItem(key)) }) }) } } }) ``` 在 `init` 方法,我们遍历本地存储的所有 key,并将对应的 value 还原到 state 。 最后,在应用初始化时,可以调用 store 的 `init` 方法来还原数据: ```javascript createApp(App).use(pinia).mount('#app') // 在应用初始化时执行 store 的 init 方法 pinia.store.$init() ``` 这样,就可以实现 Pinia 数据持久化了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codernmx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值