解决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如何循环提取对象数组中的值
Nov 18 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 Vue.js
vue使用watch监听属性变化
Apr 30 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
做个自己站内搜索引擎
2006/10/09 PHP
用PHP连接Oracle数据库
2006/10/09 PHP
php cookies中删除的一般赋值方法
2011/05/07 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
json跟xml的对比分析
2008/06/10 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
python中的格式化输出用法总结
2016/07/28 Python
python cs架构实现简单文件传输
2020/03/20 Python
详解Python中is和==的区别
2019/03/21 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
python中Django文件上传方法详解
2020/08/05 Python
标准化管理实施方案
2014/02/25 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
《秋思》教学反思
2016/02/23 职场文书