vue: 解决vuex页面刷新数据丢失问题

一、问题描述

1、一般在登录成功的时候需要把用户信息,菜单信息放置 vuex 中,作为全局的共享数据。但是在页面刷新的时候 vuex 里的数据会重新初始化,导致数据丢失。因为 vuex 里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载 vue 实例,vuex 里面的数据就会被清空。
2、我在一个组件(例如登录组件页面)中登录了后,其它页面要怎么获取和响应这个变化,使用通过计算属性实现响应数据的变化,mapGetters 获取 vuex

1computed: { 2 ...mapGetters(['blogUser']) 3 },

但是刷新页面后数据丢失了!!

二、解决思路:

  • 办法一:将 vuex 中的数据直接保存到浏览器缓存中(sessionStorage、localStorage、cookie)
  • 办法二:在页面刷新的时候再次请求远程数据,使之动态更新 vuex 数据
  • 办法三:在父页面向后台请求远程数据,并且在页面刷新前将 vuex 的数据先保存至sessionStorage(以防请求数据量过大页面加载时拿不到返回的数据)
    因为我存取的数据比较少所以通过办法一解决:
    在App.vue 中添加以下代码
1//===下面是解决刷新页面丢失vuex数据 2 created() { 3 //在页面加载时读取sessionStorage里的状态信息 4 if (sessionStorage.getItem('store')) { 5 this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store')))); 6 } 7 8 //在页面刷新时将vuex里的信息保存到sessionStorage里 9 window.addEventListener('beforeunload', () => { 10 sessionStorage.setItem('store', JSON.stringify(this.$store.state)); 11 }); 12 }

本文转自 https://www.jianshu.com/p/96ebbb0d8385,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

记录Vue项目实现axios请求头带上token

在vue项目中首先npm命令安装axios:npminstallaxiosSaxios的封装使用请求带上token,token通过登录获取存在vuex,为防止刷新丢失token使用持久化vuexpersistedstate插件保存数据npmiSvuexpersistedstateimportpersistedStat