1、页面刷新vuex数据丢失
办法一:将vuex中的数据直接保存到浏览器缓存中(sessionStorage、localStorage、cookie)
办法二:在页面刷新的时候再次请求远程数据,使之动态更新vuex数据
办法三:在父页面向后台请求远程数据,并且在页面刷新前将vuex的数据先保存至sessionStorage(以防请求数据量过大页面加载时拿不到返回的数据)
分析:
办法一的缺点是不安全,不适用大数据量的存储;
办法二适用于少量的数据,并且不会出现网络延迟;
办法三是要讲的重点,办法二和办法一一起使用。
方案一相信你会单独使用,保存到缓存中,然后再在created里面再次取,页面刷新也就可以取到
方案二相信你也会单独使用,也就是再请求一次后端的信息呗。为啥不推荐呢,重复请求会降低性能,所以要使用vuex方便管理也提升性能。
方案三是两者结合版本,也就是做了双层,
监听浏览器刷新前事件,在浏览器刷新之前就把vuex里的数据保存至sessionStorage中,刷新成功后如果异步请求的数据还没返回则直接获取sessionStorage里的数据,否则获取vuex里的数据。(只有刷新后还没取到后台数据,才会从sessionStorage里取。确保数据的安全性,就算获取sessionStorage里的数据也是安全的,因为每次刷新都会重新赋值,不必担心数据被篡改问题,其次就是对sessionStorage里的数据做了加密操作)
解决刷新问题逻辑详细解析
这里是页面created() 函数里请求用户数据getUserInfo
1、先请求vuex数据,如果成功则功 ----end
2、先请求vuex数据失败,是空的,那么请求sessionStorage,并同时再请求后端用户信息,把信息装载到vuex. ----end
然后下面又有一个监听浏览器刷新的方法,很容易懂,在浏览器刷新之前把vuex数据存储到sessionStorage
2、页面刷新监听路由数据丢失
下面就是监听路由,只要路由跳转就可以获得token值,如果刷新了那么token这个值丢失了,解决方式也跟上面一样,刷新前存储浏览器缓存,每次页面渲染先获得浏览器缓存,然后再请求数据并装载到vuex