当前位置: 首页 > news >正文

前端 JS 经典:Vue 状态仓库持久化

前言:当我们刷新页面的时侯,在状态仓库的数据会被重置,当我们不希望这些数据被重置时,可以通过给状态管理的插件添加插件方法实现。Vue 的状态管理有 Vuex 和 Pinia。下面分别是两种状态库的数据持久化的实现。

1. Vuex

在 store/index.js 里插入自定义的 persistPlugin 方法

import { createStore } from "vuex";
import user from "./user.js";
import persistPlugin from "./persistPlugin.js";const store = createStore({modules: {user,},plugins: [persistPlugin],
});export default store;

自定义 persistPlugin 方法,给浏览器监听刷新页面的操作,存入数据。在最开始获取数据

// persistPlugin.js
const KEY = "VUEX:STATE";
export default function (store) {// 存window.addEventListener("beforeunload", () => {localStorage.setItem(KEY, JSON.stringify(store.state));});// 取try {const state = JSON.parse(localStorage.getItem(KEY));if (state) {store.replaceState(state);}} catch {console.log("存储报错");}
}

2. Pinia

在 main.js 中给 Pinia 插入自定义插件

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

自定义 persistPlugin 方法,同 Vuex 大致一样。

const KEY_PREFIX = "PINIA:STATE:";
export default function (context) {const { store } = context;// 存window.addEventListener("beforeunload", () => {localStorage.setItem(`${KEY_PREFIX}${store.$id}`,JSON.stringify(store.$state));});// 取try {const state = JSON.parse(localStorage.getItem(`${KEY_PREFIX}${store.$id}`));if (state) {store.$patch(state);}} catch {console.log("存储报错");}
}

相关文章:

  • 24年河北自考报名流程详细教程汇总
  • Python实战:小说分词统计-数据可视化
  • 前端框架之 MVVM
  • 金融与大模型:引领行业未来的创新融合
  • 6spark期末复习
  • 探索 Spring Boot 集成缓存功能的最佳实践
  • Ajax的应用
  • vue+elementUI实现在表格中添加输入框并校验的功能
  • 详解 Flink CDC 的介绍和入门案例
  • 微服务与分布式面试题
  • 高效文件传输攻略:利用局域网共享实现极速数据同步
  • 【计算机视觉】人脸算法之图像处理基础知识(二)
  • Allegro X PCB设计小诀窍--如何在Allegro X中为PCB标注尺寸
  • redis序列化
  • 掌握机器学习基础:Scikit-Learn(sklearn)入门指南
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Android 控件背景颜色处理
  • Bootstrap JS插件Alert源码分析
  • dva中组件的懒加载
  • ES6 ...操作符
  • flask接收请求并推入栈
  • GraphQL学习过程应该是这样的
  • Hibernate最全面试题
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS基础之数据类型、对象、原型、原型链、继承
  • KMP算法及优化
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Spring-boot 启动时碰到的错误
  • 分布式事物理论与实践
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 服务器之间,相同帐号,实现免密钥登录
  • 欢迎参加第二届中国游戏开发者大会
  • 计算机常识 - 收藏集 - 掘金
  • 技术发展面试
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端js -- this指向总结。
  • 前端相关框架总和
  • 全栈开发——Linux
  • 删除表内多余的重复数据
  • 什么是Javascript函数节流?
  • 双管齐下,VMware的容器新战略
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微信小程序实战练习(仿五洲到家微信版)
  • 小程序button引导用户授权
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • UI设计初学者应该如何入门?
  • 浅谈sql中的in与not in,exists与not exists的区别
  • (11)iptables-仅开放指定ip访问指定端口
  • (12)Linux 常见的三种进程状态
  • (20050108)又读《平凡的世界》
  • (Java数据结构)ArrayList
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (NSDate) 时间 (time )比较
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)