一、问题描述
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,如有侵权,请联系删除。
