前端如何实现Pinia 持久化插件 Persist步骤详解

在 Vue 3 项目中,Pinia 是官方推荐的状态管理库,而 Pinia Persisted State 插件可以帮助我们将 Pinia 的状态持久化到浏览器的存储中(例如 localStoragesessionStorage),这样即使页面刷新后,状态仍然能够保持。

以下是详细的教程,涵盖了从安装插件、在 Pinia 中使用插件、配置持久化策略、验证是否成功等内容。

1. 安装 Pinia 和 Pinia Persist 插件

首先,我们需要安装 piniapinia-plugin-persistedstate 插件。

安装依赖:
npm install pinia pinia-plugin-persistedstate

2. 在 Pinia 中使用 Persist 插件

接下来,我们需要在 Pinia 中启用 Persist 插件。

store.js 中设置 Pinia 和 Persist 插件:
// stores/index.js
import { createPinia } from 'pinia';
import piniaPersist from 'pinia-plugin-persistedstate';  // 引入持久化插件const pinia = createPinia();// 启用 Pinia Persist 插件
pinia.use(piniaPersist);export default pinia;

main.js 中,确保 Pinia 被正确注册到 Vue 应用中:

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import pinia from './stores';const app = createApp(App);
app.use(pinia);  // 注册 Pinia
app.mount('#app');

3. 定义 Pinia Store 并指定持久化配置

在实际项目中,我们通常会在 store 中定义一些状态(如用户信息、主题设置等)。如果想让某个状态在浏览器中持久化存储,可以在状态定义时,使用 persist 配置。

示例:定义一个持久化状态的 Store
// stores/user.js
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({username: '',theme: 'light',}),persist: {enabled: true,  // 启用持久化strategies: [{storage: localStorage,  // 使用 localStorage 来持久化paths: ['username'],    // 只有 username 会被持久化,theme 不会},],},
});

在这个示例中,我们定义了一个 user store,其中有 usernametheme 两个状态。通过设置 persist 配置:

  • enabled: true:启用持久化。
  • storage: localStorage:表示状态数据将被存储在 localStorage 中。你也可以使用 sessionStorage,这样数据将在浏览器会话结束时丢失。
  • paths: [‘username’]:只有 username 状态会被持久化,theme 将不会被存储。

4. 在组件中使用 Store

在 Vue 组件中,我们可以通过 useUserStore 来访问和更新状态。

<template><div><h1>User: {{ username }}</h1><button @click="changeUsername">Change Username</button></div>
</template><script>
import { useUserStore } from '@/stores/user';  // 引入 storeexport default {setup() {const userStore = useUserStore();const changeUsername = () => {userStore.username = 'John Doe';  // 更新 username};return {username: userStore.username,changeUsername,};},
};
</script>

在上面的代码中,username 是从 Pinia Store 中获取的,用户点击按钮后,username 会更新,并且如果持久化设置生效,页面刷新后 username 的值将会保留。

5. 验证插件是否成功工作

为了验证 Pinia Persist 插件是否有效,我们可以按照以下步骤进行验证:

1. 刷新页面。
  • 在浏览器的 开发者工具 中打开 localStorage(或 sessionStorage),查看是否存储了 username
  • 如果存在存储的 username 数据,说明插件已经成功工作。
2. 观察数据是否持久化:
  • 如果你在页面中更新了 username,刷新页面后,检查 localStorage 中的值是否仍然存在,并且页面中的 username 是否保持更新。
验证步骤:
  1. 打开开发者工具 (F12Ctrl + Shift + I)。
  2. 转到 应用程序 (Application) 标签页。
  3. LocalStorage 下找到你的域名,检查是否有 username 数据。

如果数据如预期般持久化,说明插件已经成功生效。

6. 配置持久化策略

pinia-plugin-persistedstate 插件允许对持久化策略进行更多的配置。例如,您可以控制存储的键名、存储的位置,或者指定哪些路径应该被持久化。

常见的配置选项:
  • storage: 可以选择 localStoragesessionStorage,或者自定义存储对象。
  • paths: 定义哪些 state 应该被持久化,默认情况下会持久化所有 state。
  • key: 定义存储在 localStoragesessionStorage 中的键名。
  • rehydrate: 是否在初始化时重新加载持久化的状态。
示例:复杂的持久化配置
// stores/user.js
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({username: '',theme: 'light',lastLogin: null,}),persist: {enabled: true,  // 启用持久化strategies: [{storage: localStorage,  // 使用 localStoragepaths: ['username', 'lastLogin'],  // 持久化 username 和 lastLoginkey: 'user_data',  // 定义 localStorage 键名为 'user_data'},{storage: sessionStorage,  // 使用 sessionStoragepaths: ['theme'],  // 持久化 themekey: 'user_theme',  // 定义 sessionStorage 键名为 'user_theme'},],},
});

在这个例子中,我们使用了两个不同的持久化策略:

  • usernamelastLogin 会被存储在 localStorage 中,键名为 'user_data'
  • theme 会被存储在 sessionStorage 中,键名为 'user_theme'

7. 总结

通过 pinia-plugin-persistedstate 插件,您可以非常方便地将 Pinia 中的状态持久化到浏览器存储中。插件支持多种配置选项,可以选择存储方式(localStoragesessionStorage)以及要持久化的状态。

  • 安装插件并在 Pinia 中启用它。
  • 在 Store 中通过 persist 配置来指定哪些状态需要持久化。
  • 可以通过 localStoragesessionStorage 来存储状态数据,甚至可以为每个状态指定不同的存储方案。

这种方式可以极大地提升用户体验,尤其是在需要保存用户设置、登录状态等信息时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯食代冻干科技研究院:创新与品质并重,推动家用冻干机高质量发展

11月25日,芯食代首届食品冻干前沿与智能化升级创新大会在江苏常州成功举办。本次大会由芯食代冻干科技研究院(江苏)有限公司与芯食代(上海)科技发展有限公司联合主办,云集学界专家教授、商界企业精英,共议家用冻干机的未来创新发展。作为创新大会,芯食代冻干科技研究院也在本次…

项目基于oshi库快速搭建一个cpu监控面板

后端&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-…

什么是上下文管理器?如何使用 with 语句?

上下文管理器&#xff08;Context Manager&#xff09;是Python中的一种协议&#xff0c;它允许你在特定的语境下分配和释放资源。 通常来说&#xff0c;当你需要确保某些操作在使用资源之前执行&#xff0c;以及在使用之后进行清理时&#xff0c;上下文管理器就非常有用。 例…

926[study]Docker,DHCP

docker与虚拟机&#xff08;VMware&#xff09;的区别&#xff0c;docker基础知识与命令_docker和vmware区别-CSDN博客 .传统的虚拟机是虚拟一整套硬件后&#xff0c;在其运行一个完整的操作系统&#xff0c;而容器内的应用进程直接运行于宿主的内核&#xff0c;容器没有自己的…

【数据结构】手搓链表

一、定义 typedef struct node_s {int _data;struct node_s *_next; } node_t;typedef struct list_s {node_t *_head;node_t *_tail; } list_t;节点结构体&#xff08;node_s&#xff09;&#xff1a; int _data;存储节点中的数据struct node_s *_next;&#xff1a;指向 node…

毕设记录_音圈电机及电磁学相关_20241204

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

UPLOAD LABS | PASS 10 - 黑名单绕过(Windows . 绕过 - 变体)

关注这个靶场的其它相关笔记&#xff1a;UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 本关的目标是上传一个 WebShell 到目标服务器上&#xff0c;并成功访问&#xff1a; 通过查看源码&#xff0c;可以发现&#xff0c;本关在之前所有关卡的基础上做了…

【Elasticsearch】实现分布式系统日志高效追踪

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

mysql json数据类型查询

在MySQL中&#xff0c;JSON数据类型允许您以JSON格式存储数据&#xff0c;并提供了一些函数和操作来查询和处理这些数据。以下是一些常用的查询和操作方法&#xff1a; 插入JSON数据 您可以像插入普通文本那样插入JSON数据&#xff0c;只需确保数据是有效的JSON格式&#xff…

FoldX(FoldX5)的安装流程

下载地址:官网 https://foldxsuite.crg.eu/] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] zip解压yasaraPlugin.zip 我将foldx_20241231改为foldx vim ~/.bashrc 将foldx文件所在路径写进PATH vim ~/.bashrc我的…

利用红黑树封装map,和set,实现主要功能

如果不知道红黑树是什么的时候可以去看看这个红黑树 思路 首先我们可以把封装分为两个层面理解&#xff0c;上层代码就是set,和map&#xff0c;底层就是红黑树 就相当于根据红黑树上面套了两个map,set的壳子&#xff0c;像下面这张图一样 对于map和set&#xff0c;map里面存…

分类算法中的样本不平衡问题及其解决方案

一、样本不平衡问题概述 在机器学习的分类任务中&#xff0c;样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战&#xff0c;尤其在处理少数类样本时&#xff0c;模型可能难以有效学习其特征。 以二分类为例&#xff0c;理想情况…

通过HTML Canvas 在图片上绘制文字

目录 前言 一、HTML Canvas 简介 二、准备工作 三、绘制图片 四、绘制文字 五、完整代码 效果演示&#xff1a; 前言 HTML canvas 为我们提供了无限的创意可能性。今天&#xff0c;我们就来探索一下如何通过 HTML canvas 将图片和文字绘制到图片上&#xff0c;创造出独特…

实战ansible-playbook(四) -文件操作重定向/追加

原始命令: ----------阶段1--------------- apt-get update -y apt install nano vim iputils-ping net-tools dialog gcc apt-utils make -y systemctl stop unattended-upgradessystemctl disable unattended-upgradesecho APT::Periodic::Update-Package-Lists "1&qu…

MBox20边缘计算网关:氢能车间数据采集的智慧引擎

氢能作为未来能源体系的重要组成部分&#xff0c;其安全、高效、环保的特性备受瞩目。在氢能车间的日常运营中&#xff0c;数据采集是确保生产流程优化、设备稳定运行及能效提升的关键环节。然而&#xff0c;面对氢能车间复杂多变的生产环境和海量数据&#xff0c;如何实现高效…

linux环境GitLab服务部署安装及使用

一、GitLab介绍 GitLab是利用Ruby onRails一个开源的版本管理系统&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。 二、GitLab安装 1、先安装相关依赖 yum -y install policycoreutils openssh-server openssh-clients postf…

Gartner报告解读(四)| 如何运用上升期的基础设施自动化(IA)为企业数字化转型赋能?

近期&#xff0c;Gartner发布的《2024年中国基础设施战略技术成熟度曲线》显示&#xff0c;未来5-10年&#xff0c;大量具有颠覆性或较高影响力的创新技术可能会实现主流采用&#xff0c;其中就包括基础设施自动化&#xff08;IA&#xff09;。 基础设施自动化Gartner评估情况 …

请求响应:常见参数接收及封装(Json参数及路径参数)

Json参数 Json格式的数据具有轻量级、易于阅读和编写、易于解析等诸多优点。在前后端交互时&#xff0c;大部分情况下请求体中的数据会以JSON格式进行传递。前端的请求在请求体中携带了Json格式数据&#xff0c;后端程序需要对其进行解析并封装使用&#xff0c;而接收Json参数…

大舍传媒-关于海外媒体宣发的探讨

关于海外媒体宣发的探讨 一、海外媒体宣发的重要性 在当今全球化的时代&#xff0c;海外媒体宣发对于企业、组织和个人来说具有至关重要的意义。通过有效的海外媒体宣发&#xff0c;可以提升品牌知名度&#xff0c;拓展国际市场&#xff0c;增强影响力&#xff0c;吸引更多的潜…

项目开发之Jenkins

文章目录 思考基础概述JenkinsMavenGit集成开发部署GitLab服务 实战1 新建任务需要的配置pipeline最后 思考 jenkis怎么连接github仓库&#xff1f; jenkis的作用是什么&#xff1f;基础 概述 定义&#xff1a;Jenkins是一款开源的持续集成(Continuous Integration&#xff…