【VUE】pinia持久化存储

前言:状态持久化存储的意义在于它能够确保用户在与应用程序交互时,其操作状态、用户偏好、应用数据等关键信息在页面刷新、浏览器关闭或重新启动后依然得以保留,从而提供连贯、无缝的用户体验,避免因状态丢失导致的不便和重复操作。下面我们一起试试吧。

安装安装 Pinia:

pnpm install pinia
# 或者
yarn add pinia

在项目的入口文件(通常是 main.js 或 main.ts)中,创建一个 Pinia 实例,并将其挂载到 Vue 应用程序上:

创建 Pinia 实例:

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';
const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');

定义 Store:

使用 defineStore 方法来创建一个 Store。Store 是用来管理状态的地方:


import { defineStore } from 'pinia';
export const useMyStore = defineStore('myStore', {
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++;
    },
  },
});

安装并配置持久化插件:

npm install pinia-plugin-persistedstate
# 或者
yarn add pinia-plugin-persistedstate

在 Pinia 实例上注册插件:

import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);

在 Store 中启用持久化:

export const useMyStore = defineStore('myStore', {
  state: () => ({
    count: 0,
  }),
  persist: true, // 持久化整个状态
  // 或者
  persist: {
    key: 'my-store',
    storage: localStorage,
    pick: ['count'], // 仅持久化 count 字段
  },
});

当然,我们也可以自己尝试着实现一下

定义持久化存储插件方法

// 定义存储key前缀
const KEY_PREFIX = 'PINIA_STORE_';
import { type PiniaPluginContext } from 'pinia';

/**
 *
 * @param context pinia上下文实例
 */
export default function (context: PiniaPluginContext) {
  const { store } = context;
  const key = KEY_PREFIX + store.$id;
  // 页面卸载(刷新、关闭)前存储
  window.addEventListener('beforeunload', () => {
    localStorage.setItem(key, JSON.stringify(store.$state));
  });
  // 页面加载是取
  store.$patch(JSON.parse(localStorage.getItem(key) || '{}'));
}

挂在到pinia实例上

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';
const app = createApp(App);
const pinia = createPinia();
import persist from '@/stores/persist';
pinia.use(persist);
app.use(pinia);
app.mount('#app');

预览

请添加图片描述

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值