vuex页面刷新数据丢失怎么办-,vuex刷新数据丢失

  vuex页面刷新数据丢失怎么办?,vuex刷新数据丢失

  本文主要介绍如何解决vue页面刷新和数据丢失的问题,帮助大家更好的理解和使用vue框架。感兴趣的朋友可以了解一下。

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

  解决方法一:

  首先想到的是使用localStorage/sessionStorage对外存储数据,做一个持久存储。下面是使用localStorage存储的具体方案:

  方案一:因为状态中的数据是有响应的,并且通过变异修改数据,所以调用localStorage.setItem()方法在通过变异修改状态中的数据的同时存储数据。

  从“Vue”导入Vue;

  从“Vuex”导入Vuex;

  vue . use(Vuex);

  导出默认的新Vuex。商店({

  状态:{

  订单列表:[],

  菜单列表:[]

  },

  突变:{

  订单列表{

  s . order list=d;

  window . local storage . setitem( list ,JSON.stringify(s.orderList))

  },

  菜单列表(s,d) {

  s . menu list=d;

  window . local storage . setitem( list ,JSON.stringify(s.menuList))

  },

  }

  })

  页面加载完成后,取出数据,通过localStorage.getItem()放回vuex。可以在app.vue的created()周期函数中编写以下代码:

  if(window . local storage . getitem( list ){

  这个。$ store . replace state(object . assign({ },

  这个。$store.state,JSON . parse(window . local storage . getitem( list )))

  }

  方案二:方案一可以顺利解决问题,但是连续触发localStorage.setItem()方法对性能不是特别友好。而且好像也不需要一直用vuex进行状态管理,用localStorage就行了,所以上面的解决方案都有所改进。数据的本地存储是通过监视页面刷新时触发的beforeunload事件来执行的。具体方法是在App.vue的created()周期函数中写以下代码:

  if(window . local storage . getitem( list ){

  这个。$ store . replace state(object . assign({ },this。$store.state,JSON . parse(window . local storage . getitem( list )))

  }

  window . addevent listener( before unload ,()={

  window . local storage . setitem( list ,JSON.stringify(this。$store.state))

  })

  解决方法二(推荐):

  该方法基于对计算的计算属性的理解。vue的官方文件中有这样一段话:

  由此可知,计算属性的结果会被缓存,也就是说,如果有缓存,computed会优先缓存,所以在状态数据对应的页面上也可以这样写:

  计算值:{

  orderList() {

  归还这个。$store.state.orderList

  }

  }

  以上是解决vue页面刷新和数据丢失问题的详细内容。更多关于vue页面刷新和数据丢失的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: