解决vue页面刷新,数据丢失的问题


Posted in Vue.js onNovember 24, 2020

在做vue项目的过程中有时候会遇到一个问题,就是进行F5页面刷新的时候,页面的数据会丢失,出现这个问题的原因是因为当用vuex做全局状态管理的时候,store中的数据是保存在运行内存中的,页面刷新时会重新加载vue实例,store中的数据就会被重新赋值,因此数据就丢失了,解决方式如下:

解决方法一:

最先想到的应该就是利用localStorage/sessionStorage将数据储存在外部,做一个持久化储存,下面是利用localStorage存储的具体方案:

方案一:由于state中的数据是响应式的,而数据又是通过mutation来进行修改,故在通过mutation修改state中数据的同时调用localStorage.setItem()方法来进行数据的存储。

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
 state: {
  orderList: [],
  menuList: []
 },
 mutations: {
  orderList(s, d) {
   s.orderList= d;
   window.localStorage.setItem("list",JSON.stringify(s.orderList))
  }, 
  menuList(s, d) {
   s.menuList = d;
   window.localStorage.setItem("list",JSON.stringify(s.menuList))
  },
 }
})

在页面加载的时候再通过localStorage.getItem()将数据取出放回到vuex,可在app.vue的created()周期函数中写如下代码:

if (window.localStorage.getItem("list") ) {
  this.$store.replaceState(Object.assign({}, 
  this.$store.state,JSON.parse(window.localStorage.getItem("list"))))
}

方案二:方案一能够顺利解决问题,但不断触发localStorage.setItem()方法对性能不是特别友好,而且一直将数据同步到localStorage中似乎就没必要再用vuex做状态管理,直接用localStorage即可,于是对以上解决方法进行了改进,通过监听beforeunload事件来进行数据的localStorage存储,beforeunload事件在页面刷新时进行触发,具体做法是在App.vue的created()周期函数中下如下代码:

if (window.localStorage.getItem("list") ) {
  this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(window.localStorage.getItem("list"))))
 } 

window.addEventListener("beforeunload",()=>{
  window.localStorage.setItem("list",JSON.stringify(this.$store.state))
 })

解决方法二(推荐):

这个方法是基于对computed计算属性的理解,在vue的官方文档中有这么一段话:

解决vue页面刷新,数据丢失的问题

由此得知计算属性的结果会被缓存,也就是说在有缓存的情况下,computed会优先使用缓存,于是也可以在state数据相对应的页面这样写:

computed:{
  orderList() {
    return this.$store.state.orderList
  }
}

以上就是解决vue页面刷新,数据丢失的问题的详细内容,更多关于vue页面刷新,数据丢失的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue-router定义元信息meta操作
Dec 07 Vue.js
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
vue实现可移动的悬浮按钮
Mar 04 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
Vue2.0搭建脚手架
Mar 13 Vue.js
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 Vue.js
Vue 的 v-model用法实例
Nov 23 #Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 #Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 #Vue.js
详解vue 组件注册
Nov 20 #Vue.js
vue-drawer-layout实现手势滑出菜单栏
Nov 19 #Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 #Vue.js
You might like
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
vue模式history下在iis中配置流程
2019/04/17 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
python中四舍五入的正确打开方式
2021/01/18 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
销售目标责任书
2014/07/23 职场文书
赞助商致辞
2015/07/30 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android