Vuex状态、数据持久化(vue2、vue3状态数据持久化)

简介:Vuex是一个仓库,是vue的状态管理工具,存放公共数据,任何组件都可以使用vuex里的公共数据。Vuex提供了插件系统,允许我们使用 vuex-persistedstate插件,将Vuex的状态持久化到本地存储中,解决页面刷新或重新打开应用时状态丢失的问题;这里记录一下Vuex数据持久化的几种实现方案。

⭐这里先介绍一下Vuex里面属性及使用

1、属性介绍

 //1、state存放状态和数据state: {flag: 0,},//2、mutations修改状态和数据mutations: {defineTest(state, i) {state.flag = i;}},//3、getters计算属性getters: {},//4、actions异步操作actions: {},//5、modules模块化modules: {},//6、持久化插件plugins: [vuexPersistedState({storage: window.localStorage, // 指定存储引擎  }),],

2、页面调用

 //state的调用方式 1computed: {  ...mapState(['flag']) // 将 this.$store.state.count 映射为组件内的 count 计算属性  },<div>{{ flag }}</div>   //state的调用方式 2<div v-if="this.$store.state.flag">测试数据</div>//mutations的调用方式 1methods: {  // 将 this.increment() 映射为this.$store.commit('increment')      ...mapMutations(['increment']),  // 触发事件this.increment();}  //mutations的调用方式 2this.$store.commit('defineTest', i)//actions的调用方式this.$store.dispatch('someAction', payload);

⭐Vue2中,Vuex状态、数据持久化

一、通过手写函数和plugins,实现状态、数据持久化话;

1、新建pluginPersist.js文件,并导出存储函数

/*** * @param {状态、数据持久化} store */
export default function (store) {// console.log(store);// 存const KEY = 'VUEX:STATE';//这里表示 页面关闭 或 刷新 时存储window.addEventListener("beforeunload", () => {localStorage.setItem(KEY, JSON.stringify(store.state))})// 取try {const state = JSON.parse(localStorage.getItem(KEY));if (state) {store.replaceState(state);}} catch (err) {console.log(err);}
}

2、在store中,在plugins里引入挂载使用;plugins插件中的函数会在创建仓库时执行,插件的本质就是一个函数

import Vue from 'vue'
import Vuex from 'vuex'
import pluginPersist from "./pluginPersist"Vue.use(Vuex)const store = new Vuex.Store({state: {  // ...状态、数据 },  mutations: {  // ...修改状态、数据},  actions: {  // ...动作函数 },  getters: {  // ...计算属性},  modules: {// ...模块化},//这里使用plugins: [pluginPersist],})export default store;

二、通过手写db对象方法,实现数据、状态持久化;

1、新建localStorage.js文件,创建db对象,然后导出db方法

var localStorage = window.localStorage;
const db = {/** * 更新状态 */save(key, value) {// console.log(key, value);// 页面关闭或刷新时存储// window.addEventListener("beforeunload", () => {//     localStorage.setItem(key, JSON.stringify(value))// })// 触发该事件时存储 二选一localStorage.setItem(key, JSON.stringify(value));},/** * 获取状态,如果有状态值,获取最新状态值;如果没有,获取默认值 */get(key, getSaveVal = null) {// console.log(key, getSaveVal);try {return JSON.parse(localStorage.getItem(key)) || getSaveVal;} catch (err) {console.log(err);}},/** * 移除状态 */remove(key) {// console.log(key);localStorage.removeItem(key);},/** * 清空状态 */clear() {localStorage.clear();}
};
export default db;

2、在store中引入使用

import Vue from 'vue'
import Vuex from 'vuex'
import db from './localStorage';Vue.use(Vuex)const store = new Vuex.Store({state: {// 初始化时 默认获取state1: db.get('STATE1') || null,},mutations: {SET_STATE1: (state, value) => {state.state1++//调用SET_STATE1方法时 这里存储db.save('STATE1', state.state1);},},actions: {  // 动作函数 },  getters: {  // 计算属性},  modules: {// 模块化},// 插件plugins: [],})export default store

3、组件中调用SET_STATE1方法,并传值data

methods: {choseBtn(){this.$store.commit("SAVE_DOTS", this.data);}
},

三、通过vue插件vuex-persistedstate 或 vuex-plugin-persistedstate实现数据、状态持久化;

1、安装依赖

npm install vuex-persistedstate --save  
//或者  
cnpm install vuex-persistedstate --save 
//或者
yarn add vuex-persistedstate--save是安装在生产环境,开发和生产都需要用到//查看插件的依赖项
npm ls vuex-persistedstate

Tips:vuex-persistedstate 和 vuex-plugin-persistedstate 是同一个插件的不同引用方式,它们都是用来持久化 Vuex 状态管理的插件,可以将 Vuex 中的状态保存到本地存储(如 localStorage 或 sessionStorage)中,以便在刷新页面或重新打开应用时恢复这些状态;persist目前已经弃用;

2、引入使用

import Vue from 'vue';  
import Vuex from 'vuex';  
import createPersistedState from 'vuex-persistedstate';  Vue.use(Vuex);  export default new Vuex.Store({  state: {  // ...你的状态定义  },  mutations: {  // ...你的变更函数定义  },  actions: {  // ...你的动作函数定义  },  getters: {  // ...你的计算属性定义  },  modules: {// ...模块化},plugins: [  createPersistedState({  storage: window.localStorage, // 或者使用 sessionStorage  }),  ],  
});

3、注意事项:

  • createPersistedState 函数创建了一个插件实例;

  • 可以将存储选项(如 localStorage 或 sessionStorage)作为参数传递给它,插件默认使用 localStorage,但是可以根据需要选择其他存储方式;

  • vuex-persistedstate 插件默认会持久化 Vuex 中的所有状态,如果你只想持久化部分状态,可以通过配置插件的 paths 选项来实现

createPersistedState({  storage: window.localStorage,  // 只持久化这些路径下的状态  paths: ['some', 'partial', 'state'] 
})

在上面的配置中,只有 state.some/partial/state 路径下的状态会被持久化;其它状态在页面刷新或重新加载时不会得到恢复。



⭐Vue3中,Vuex状态、数据持久化

Vue3中的数据、状态持久化,可以通过Pinia插件实现,是vue3官方指定的持久化实现方案,地址在这:

Pinia官网icon-default.png?t=N7T8https://pinia.vuejs.org/zh/

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

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

相关文章

【工具篇】总结比较几种绘画软件的优缺点

目录 一、Visio二、Processon三、draw.io四、亿图图示五、wps 写在文章开头&#xff0c;感谢你的支持与关注&#xff01;小卓的主页 一、Visio Visio 是微软公司开发的一款流程图和图表绘制软件。我们可以用它来创建各种类型的图表&#xff0c;如流程图、组织结构图、网络图、平…

【python从入门到精通】-- 第二战:注释和有关量的解释

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

java的一些内部小知识,类与对象的关系

目录 1. java2. 类与对象的关系 1. java test.java ---- javac --> Test.class ---- java-----> 内存 ----> cpu 源文件 二进制代码 所有正在运行的软件都在内存中有自己的内存空间 jvm —>运行java程序的&#xff0c;java虚拟机 main(); // 内部调用run()run(i…

Fiddler抓包工具之fiddler的常用快捷键

一、常用三个快捷键 ctrlX :清空所有记录 CtrlF&#xff1a;查找 F12&#xff1a;启动或者停止抓包 使用 QuickExec Fiddler2 成了网页调试必备的工具&#xff0c;抓包看数据。Fiddler2自带命令行控制。 fiddler 命令行快捷键&#xff1a;ctrl q &#xff0c;然后 输入 help…

QTday5

头&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> //定时器事件 #include <QTime> //时间类 #include <QtTextToSpeech> //文本转语音类 #include <QMouseEvent> //鼠标事件类 QT_BEGIN_NAMESPACE …

Redis锁,乐观锁与悲观锁

锁 悲观锁 认为什么时候都会出问题&#xff0c;无论做什么都会加锁 乐观锁 很乐观&#xff0c;认为什么时候都不会出问题&#xff0c;所以不会上锁。 更新数据时去判断一下&#xff0c;在此期间&#xff0c;是否有人修改过这个数据 应用于&#xff1a;秒杀场景 **watch*…

【保姆级讲解Edge兼容性问题解决方法】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d; 希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

新人应该从哪几个方面掌握大数据测试?

什么是大数据 大数据是指无法在一定时间范围内用传统的计算机技术进行处理的海量数据集。 对于大数据的测试则需要不同的工具、技术、框架来进行处理。 大数据的体量大、多样化和高速处理所涉及的数据生成、存储、检索和分析使得大数据工程师需要掌握极其高的技术功底。 需要你…

【Java程序设计】【C00366】基于(JavaWeb)Springboot的纹理生产图片系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

MySQL 经典练习 50 题 (记录)

前言&#xff1a; 记录一下sql学习&#xff0c;仅供参考基本都对了&#xff0c;不排除有些我做的太快做错了。里面sql不存在任何sql优化操作&#xff0c;只以完成最后输出结果为目的&#xff0c;包含我做题过程和思路最后一行才是结果。 1.过程: 1.1.插入数据 /* SQLyog Ul…

STM32之HAL开发——手动移植HAL库

HAL库移植步骤 创建目录 配置启动文件 在\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates\ARM目录下&#xff0c;根据你的芯片型号选择对应的启动文件&#xff0c;不同容量大小的芯片&#xff0c;对应的启动文件也不一样。 注意&#xff1a;在HAL库中&#xff0c;不同容…

centos7二进制安装openstack train版本双网口五节点

这里写目录标题 材料准备宿主机安装KVM 网络规划硬件规划本案例局限性密码规划虚拟机准备网络准备centos7模板机准备 数据库安装安装rabbitMQ消息队列安装memcached服务安装Etcd安装keystone身份服务创建数据库用户keystone安装keystone组件创建admin并启动keystone监听验证key…

canvas画带透明度的直线和涂鸦

提示&#xff1a;canvas画线 文章目录 前言一、带透明度的直线和涂鸦总结 前言 一、带透明度的直线和涂鸦 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…

堆排序(六大排序)

前面博客已经分享过堆的知识了&#xff0c;今天我们来分享堆排序。 堆排序 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆来进行选择数据。 ★★★需要注意的是排升序要建大堆&#…

【前端Vue】Vue3+Pinia小兔鲜电商项目第3篇:静态结构搭建和分类实现,1. 整体结构创建【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

苍穹外卖项目笔记

软件开发流程 需求分析&#xff1a;说明书和原型 设计&#xff1a;UI&#xff0c;数据库&#xff0c;接口设计 编码&#xff1a;项目代码&#xff0c;单元测试 测试&#xff1a;测试用例&#xff0c;测试报告 上线运维&#xff1a;软件环境安装&#xff0c;配置 软件环境…

IPhone让用户升级?网友你咋不降点!

最近一个热搜刷屏了我的朋友圈&#xff0c;我点开一看是苹果上架了全新“换代有来”页面&#xff0c;其主要表达了苹果用户可以将旧的iphone升级到全新的iphoe15上。并告诉贴心的给网友对比了一下换代的好处。 并且还详细了说了一些iPhone 11、11 Pro、11 Pro Max、12、12 mini…

【鸿蒙HarmonyOS开发笔记】使用@Preview装饰器预览组件

概述 ArkTS应用/服务支持组件预览&#xff0c;要求compileSdkVersion为8或以上。组件预览支持实时预览&#xff0c;不支持动态图和动态预览。组件预览通过在组件前添加注解Preview实现&#xff0c;在单个源文件中&#xff0c;最多可以使用10个Preview装饰自定义组件。 Preview…

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)

EI级&#xff01;高创新原创未发表&#xff01;VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测&#xff08;Matlab&#xff09; 目录 EI级&#xff01;高创新原创未发表&#xff01;VMD-TCN-BiGRU-MATT变分模态分解卷积神经…

Elastic 线下 Meetup 将于 2024 年 3 月 30 号在武汉举办

2024 Elastic Meetup 武汉站活动&#xff0c;由 Elastic、腾讯、新智锦绣联合举办&#xff0c;现诚邀广大技术爱好者及开发者参加。 活动时间 2024年3月30日 13:30-18:00 活动地点 中国武汉 武汉市江夏区腾讯大道1号腾讯武汉研发中心一楼多功能厅 13:30-14:00 入场 活动流程…