如何让Vuex刷新页面数据不丢失?实现方法和原理 vuex-persistedstate 和 vuex-persist的使用

如题:由于vue自身特性的原因,vuex中的数据在页面刷新之后其中的数据会初始化,这就导致组件之间通过vuex传递的数据在用户f5刷新页面之后会丢失

页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被应用了。

vuex的优劣势:

  •      优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到
  •      劣势:在F5刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。
  •      为了克服这个问题,vuex-persistedstate和 vuex-persist出现了~~

原理:

  • 将vuex的state存在localStorage或sessionStorage或cookie中一份
  • 刷新页面的一瞬间,vuex数据消失,vuex回去sessionStorage中哪会数据,变相的实现了数据刷新不丢失~

区别与建议: 个人还是推荐使用vuex-persistedstate,因为使用vuex-persist在一些浏览器,ie和微信会出现语法报错的问题

  • vuex-persist是TypeScript类型,vuex-persistedstate是JavaScript类型,默认vue的webpack是没有对TypeScript进行编译的
  • 如果想要使用vuex-persist需要手动配置一下webpack使用 webpack 编译 TypeScript 代码

第一种:vuex-persistedstate

  • 结构
  • 安装
    npm install vuex-persistedstate  --save
  • 引入及配置
    • 在store下的index.js中
    • import Vue from 'vue';
      import Vuex from 'vuex';
      import info from './modules/user-info';
      import knowledge from './modules/knowledge';
      import sixElements from './modules/six-elements';
      import difficultySpeed from './modules/difficulty-speed';import createPersistedState from 'vuex-persistedstate';Vue.use(Vuex);const store = new Vuex.Store({modules: {info,knowledge,sixElements,difficultySpeed},plugins: [createPersistedState({storage: window.sessionStorage,paths: ["info", "knowledge", "sixElements", "difficultySpeed"]})],
      });export default store;
      

    • vuex-persistedstate源码地址及API

第二种:vuex-persist

  • 目录结构
  • 安装
    npm install vuex-persist --save

  • 引入及配置
    • 在store下的index.js中
  • import Vue from 'vue';
    import Vuex from 'vuex'
    import VuexPersistence from 'vuex-persist'
    import conversion from './modules/conversion'
    import userInfo from './modules/userInfo'
    import tagviews from './modules/tagviews'Vue.use(Vuex);const vuexLocal = new VuexPersistence({key: 'message',storage: window.localStorage,reducer: (state) => ({userInfo: state.userInfo})
    })
    const vuexSession = new VuexPersistence({key: 'message',storage: window.sessionStorage,reducer: (state) => ({tagviews: state.tagviews})})
    const store = new Vuex.Store({modules: {conversion,userInfo,tagviews},plugins: [vuexSession.plugin, vuexLocal.plugin]
    })export default store
    

  • vuex-persist的API


---------------------
作者:希文Gershwin
来源:CSDN
原文:https://blog.csdn.net/weixin_44309374/article/details/101150536
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

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

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

相关文章

linux系统中如何查看日志 (常用命令)

2019独角兽企业重金招聘Python工程师标准>>> linux系统中如何查看日志 (常用命令) cat tail -f 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/…

C语言之基本算法26—佩尔方程求解

//穷举法&#xff01;/*题目&#xff1a;求佩尔方程x*x-73*y*y1的解。 */ #include<stdio.h> #include<math.h> int main(void) {int x,y;double t;for(y1;y<10000000;y){t1.073.0*y*y;x(int)sqrt(t);if((x<10000000)&&(1.0*x*xt))printf("x%8d…

刚刚 Kubernetes 1.25 正式发布,所有变化都在这儿了

此版本带来了 40 项增强功能&#xff0c;略少于Kubernetes 1.24 中的 46 项。在这 40 项增强功能中&#xff0c;13 项正在升级到稳定版&#xff0c;10 项是对现有功能的不断改进&#xff0c;15 项是全新的&#xff0c;2 项是已弃用的功能。此版本的亮点是 PodSecurityPolicies …

vue经验 - 细节小知识点汇总(更新中...)

1. $refs 数据这么绑定的&#xff1a; 然后在created中抛出来&#xff0c;猜猜看看打印的是两个什么&#xff1f; 结果如下&#xff1a; 第一个跑出来了&#xff0c;第二个&#xff0c;却undefiend&#xff0c;没有东西&#xff1f;&#xff01;。。。 后来去官网查看$refs的解…

Jquery打叉怎么办

选中报错文件右键MyEclipse>Exclude From xxxx

cf769D(枚举位或运算)

题目链接&#xff1a;http://codeforces.com/problemset/problem/769/D 题意&#xff1a;求给出的 n 个数中有多少对数字的二进制形式恰好有 k 位不同 思路&#xff1a;两个数a, b的二进制形式恰好 k 位不同即 a ^ b 中 1 的个数&#xff0c;那么可以枚举&#xff0e;注意 n 为…

ASP.NET Core 同时支持多种认证方式

前言上次&#xff0c;我们实现了《ASP.NET Core 自定义认证》&#xff1a;services.AddAuthentication(option > {option.DefaultAuthenticateScheme DemoAuthenticationOptions.Scheme;option.DefaultChallengeScheme DemoAuthenticationOptions.Scheme;}).AddDemoAuthen…

Linux shell 编程(七):流程控制语句

流程控制语句 在shell中如果在终端输入多个命令&#xff0c;如果以&分隔则将命令放入后台执行&#xff0c;如果以;分隔&#xff0c;则表示一个命令集合。shell允许使用逻辑操作符&&和||来作为命令分隔符&#xff0c;他们分别时AND和OR. && 如果前面命令执行…

多线程锁--怎么理解Condition

在java.util.concurrent包中&#xff0c;有两个很特殊的工具类&#xff0c;Condition和ReentrantLock,使用过的人都知道&#xff0c;ReentrantLock&#xff08;重入锁&#xff09;是jdk的concurrent包提供的一种独占锁的实现。它继承自Dong Lea的 AbstractQueuedSynchronizer&a…

.NET 8 SDK安装包可以下载了

今早在一个技术交流群看到有.NET 8的安装交流&#xff0c;站长下载了&#xff0c;把安装过程记录了&#xff0c;总结是&#xff1a;目前还无法 正常使用 .NET 8 SDK&#xff0c;虽然可以正常下载、安装&#xff0c;但宇宙第一IDE VS还尚未支持&#xff0c;也许站长打开方式不对…

VUE3中实现word的预览功能

安装docx-preview cnpm i docx-preview --save 在vue文件中使用 <div ref"refWord" v-if"showType word" /> <script setup name"ResPreviewBox">import { ref } from vue import { httpGet, httpGetBlob } from ../utils/requ…

css定位positon

值描述absolute 生成绝对定位的元素&#xff0c;相对于 static 定位以外的第一个父元素进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 fixed 生成绝对定位的元素&#xff0c;相对于浏览器窗口进行定…

chrome插件网站

chrome插件网站 http://chromecj.com/

VUE3+pdfh5实现预览Pdf文件

安装插件 npm install pdfh5 使用 <template><el-container class"resPreview"><div ref"refPdf"/></el-container> </template><script setup name"PreviewBox">import { ref } from vue import { http…

TODO:从数据库中随机抽取一条记录

TODO&#xff1a;从数据库中随机抽取一条记录1.最直接&#xff0c;最粗暴的方法先计算记录的总数&#xff0c;然后选择一个从0到记录总数之间的随机数n&#xff0c;利用skip跳过n条记录&#xff0c;这是效率低下的的方法&#xff0c;首先的记录总数&#xff0c;在用skip会很耗时…

5gnr帧结构特点有哪些_PLC控制柜有哪些结构特点呢?

金陵奇峰PLC控制柜是指可编程控制柜&#xff0c;控制柜指成套的控制柜,可实现电机,开关的控制的电气柜。金陵奇峰PLC控制柜具有过载、短路、缺相保护等保护功能。下面奇峰小编来为大家介绍一下PLC控制柜有哪些特点。PLC控制柜特点与优势&#xff1a;1、PLC控制柜是指可编程控制…

基于 .NET 6 的轻量级 Webapi 框架 FastEndpoints

大家好&#xff0c;我是等天黑。FastEndpoints 是一个基于 .NET 6 开发的开源 webapi 框架&#xff0c;它可以很好地替代 .NET Minimal APIs 和 MVC &#xff0c;专门为开发效率而生&#xff0c;带来了全新的开发模式和编码体验。另外对于 .NET 的中间件、认证、授权、日志&…

OO学习总结(二)

第五次作业&#xff1a;多线程电梯 多线程的同步和控制 在本次作业里&#xff0c;请求发生器不断往请求队列里加入电梯请求&#xff0c;主调度器不停将电梯请求分发给从调度器&#xff0c;从调度器不断读取请求来操控电梯运行&#xff0c;因而这三者之间存在同步关系。请求发生…

js导出PPT -- pptxgen使用方法

pptxgen使用方法 下载地址 https://codechina.csdn.net/mirrors/gitbrent/PptxGenJS?utm_sourcecsdn_github_accelerator ## 1. 文件引入 <script src"../js/pptxgen.bundle.js"></script> <script src"../js/jszip.min.js"></scr…

记录最近的一些遇到的前端面试题

HTML部分&#xff1a;1.问&#xff1a;DOCTYPE是什么。 答&#xff1a;查看w3school的详细解释http://www.w3school.com.cn/ta...&#xff1a;DTD, SGML) 2.问&#xff1a;有哪些行内元素、有哪些块级元素。margin属性是否对行内元素有所作用。 答&#xff1a;块级元素常用的有…