vue如何在页面刷新时保留状态信息

2023-11-04

vue如何在页面刷新时保留状态信息

本篇转载至来自简书,仅供自己学习用。

1、通过本地存储 state中的数据,页面刷新成功后再次从本地存储中读取state数据
// vuex中的数据发生改变时触发localStorage的存储操作

localstorage.setItem('state', JSON.stringify(this.$store.state))

// 页面加载的时候在created中获取本地存储中的数据
localStorage.getItem('state') && this.$store.replaceState(JSON.parse(localStorage.getItem('state')));
注意:该操作会频繁的触发localStorage的存取工作

2、 监听页面刷新,触发存取操作
首先在入口组件App.vue中的created中利用localstorage或者sessionStorage来存取state中的数据

// 在页面加载时读取sessionStorage里的状态信息

if ( sessionStorage.getItem('state') ) {
  this.$store.replaceState( Object.assign( {}, this.$store.state,
  JSON.parse(sessionStorage.getItem('state') ) ) )
}

// 页面刷新时将state数据存储到sessionStorage中

window.addEventListener('beforeunload',()=>{
  sessionStorage.setItem('state',JSON.stringify(this.$store.state) )
})

注意:Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象
vuex状态保留
到这里,我们在PC端、安卓端、mac端safair浏览器中均能正常访问,但是在ios端的safair浏览器中存在问题,页面刷新后拿不到数据。

原因:在ios端beforeunload方法未执行,造成state数据未存储到本地,通过查询ios官方文档,文档中说unload和beforeunload已经废弃,使用pagehide作为代替

window.addEventListener('pagehide', () => {
     sessionStorage.setItem('state', JSON.stringify(this.$store.state))
   })

这样一番改动后,果然在PC端、安卓端、ios端均未出现问题

// 会话历史事件

pageshow事件:在用户访问页面时触发;pageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, pageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。

pagehide事件:在用户离开当前网页时触发;pagehide 事件有时可以替代 unload事件,但 unload 事件触发后无法缓存页面。

作者:苦咖啡Li
链接:

https://www.jianshu.com/p/d3d8cbee46c0

来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue如何在页面刷新时保留状态信息 的相关文章

  • 关于解决Vmware虚拟机中Firefox没有网络的解决方法

    1 打开 应用程序 gt 系统工具 gt 设置 2 找到 网络 gt 打开 有线 开关 3 显示 已连接 再访问Firefox浏览器就发现可以上网了 今天新建了一个centOS7的虚拟机 但是发现东西啥都配置好了 进入Firefox浏览器想
  • 在外包的这几年,技术和管理经验总结

    我是2010年4月份进入华为外包公司 然后在5月份跳槽到现在的公司 一直待到现在 目前是公司持证PM 华为技能定级五级 技术篇 这些年主要一直在做同一个项目 某个业务发放网关管理系统 这里简称SPXX 主要是用于管理所有的BOSS系统和组网
  • redis基础知识汇总

    redis基础知识汇总 一 redis 基础知识 1 什么是Redis 2 redis的优缺点 3 redis比memcached的优势在哪里 以及两者的区别 4 redis的持久化策略 5 Redis过期键的删除策略 6 数据淘汰策略 7

随机推荐

  • 头文件声明忘记加分号导致报错

    头文件出错 main文件显示错误 编译报错 Using Compiler V5 06 update 5 build 528 folder D Keil5 ARM ARMCC Bin Build target Target 1 compili
  • java垃圾回收策略_Java内存管理基础篇 - Java内存回收-常见的垃圾回收策略

    Java的内存使用完之后 是通过JVM的GC进行回收的 1 概述 垃圾收集的目的在于清除不再使用的对象 gc通过确定对象是否被活动对象引用来确定是否收集该对象 gc首先要判断该对象是否是时候可以收集 两种常用的方法是引用计数和对象引用遍历
  • Android通过滑动实现Activity跳转(手势识别器应用)

    通过手势识别器实现界面的转跳 1 创建 GestureDetector对象 2 创建新类继承SimpleOnGestureListener类 创建 GestureDetecto需要的参数 3 重写SimpleOnGestureListene
  • 八大定位元素的方法

    ind element by xxx 查找符合规范的元素 并返回查找到的第一个元素 通过使用这个方法 find elements by xxx 查找符合规范的元素 并以列表的形式返回 一 八大定位元素的方法 1 根据元素id属性定位元素 重
  • 尝试运行项目时出错:无法启动程序

    很久木有写程序了 刚才偶尔写了个 竟然碰到如此问题 留个纪念 处理方法 把你打开的网络游戏关了 再试试就ok了
  • Error: Java exception was raised during method invocation

    项目中有用到 JavascriptInterface 来JS Java 通讯 但是 H5 报了一个异常 我在一个通讯方法里申请动态权限 后发现需要切换到主线程才行 其实是所有的 UI 操作都要切换到主线程 否则会抛出异常 后改为以下代码解决
  • [转载]TF-IDF模型的概率解释

    信息检索概述 信息检索是当前应用十分广泛的一种技术 论文检索 搜索引擎都属于信息检索的范畴 通常 人们把信息检索问题抽象为 在文档集合D上 对于由关键词w 1 w k 组成的查询串q 返回一个按查询q和文档d匹配度relevance q d
  • 自动化测试 —— unittest框架,理论和实操双管齐下

    unittest 1 什么是Unittest框架 python自带一种单元测试框架 2 为什么使用UnitTest框架 gt 批量执行用例 gt 提供丰富的断言知识 gt 可以生成报告 3 核心要素 1 TestCase 测试用例 2 Te
  • UVA-127 纸牌游戏 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 简单的模拟题目 暴力即可 我使用了栈记录每个堆的数量 include
  • 软件测试分级理论

    软件测试是软件工程当中不可或缺的一个过程 在软件工程中 测试者充当 虚拟用户 对软件产品进行检验 只有经过严格测试的软件产品 才能发布给用户使用 只要有软件的地方 就有软件测试 软件测试是一个包罗万象的话题 这种 包罗万象 的具体表现之一就
  • 使用streamstring实现格式化输入

    目的 在windows系统写c 项目 常用sscanf s进行格式化输入 但是在ubuntu系统上发现sscanf s不可用 只有sscanf可用 但是它是c 99 的函数了 后面查阅知道 这个sscanf s函数是微软专有的函数 不具有跨
  • 关于hibernate在实体类增加字段启动项目报错

    如果出现这种情况 有可能涉及到hibernate或者mysql的缓存 因为第一次启动失败 mysql或者hibernate已经在数据库添加相应的字段 并生成缓存 然后之后的修改 启动项目也不会成功 因为hibernate会一直访问缓存 所以
  • cmake指令基础知识

    总结 写在前面 方便查看 1 cmake指令API文档 cmake指令 2 cmake指令中的常量 cmake变量 比如设置静态库和动态库输出目录的CMAKE ARCHIVE OUTPUT DIRECTORY和CMAKE LIBRARY O
  • 都9102年了还不懂动态图吗?一文带你了解飞桨动态图

    导读 飞桨PaddlePaddle致力于让深度学习技术的创新与应用更简单 飞桨核心框架已提供了动态图 DyGraph 相关的API和文档 并且还附有Language model Sentiment Classification OCR Re
  • 24. 两两交换链表中的节点 ----链表再学习

    https leetcode cn com problems swap nodes in pairs 思路如下图 蓝绿色箭头代表我们要构建的指向 红色箭头代表原来的指向 代码如下 Definition for singly linked l
  • C++ 实现两线段是否相交、相交情况、若相交求出交点坐标

    前段时间做计算机图形学的东西 现在闲下来 对代码稍作整理 都是些实用的函数 判断是否相交 X1 Y1 X2 Y2 前线 X3 Y3 X4 Y4 后线 x y 交点坐标 相交在前线上return 1 后线return 2 交于外面return
  • MacOS:Launchd&LaunchDaemon&LaunchAgent&.plist文件编写

    launchd官方文档 gt gt 详解文章1 gt gt 详解文章2 gt gt 什么是launchd 来自于官方文档 Wikipedia defines launchd as a unified open source service
  • java 基础 之 Comparable与Comparator

    曾经去一家公司面试 上来第一道问题就是问这个 原题目大概是 给你一个Student类 实现Comparable接口 如何写这个compareTo方法 当时很蒙 因为长时间的CURD 只是用的比较多 但是基础相对薄弱 结果必然是铩羽而归 为什
  • SQUASHFS error

    when i do flashcp operation and there are some errors happen asbelow SQUASHFS error xz dec run error data probably corru
  • vue如何在页面刷新时保留状态信息

    vue如何在页面刷新时保留状态信息 本篇转载至来自简书 仅供自己学习用 1 通过本地存储 state中的数据 页面刷新成功后再次从本地存储中读取state数据 vuex中的数据发生改变时触发localStorage的存储操作 localst