解决vue页面刷新vuex中state数据丢失的问题

 更新时间:2022年01月23日 14:17:00   作者:累成一条狗  
这篇文章介绍了解决vue页面刷新vuex中state数据丢失的问题,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

页面刷新后,原有的 vuex 中的 state 会发生改变,如果在页面刷新之前,可以将 state 信息保存,页面重新加载时,再将该值赋给 state,那么该问题即可解决。

1、localstorage

可以使用 localstorage 来保存信息。

【在某组件中添加如下钩子函数。比如 App.vue中】
created() {
    //在页面加载时读取localStorage里的状态信息
    if (localStorage.getItem("store") ) {
        this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(localStorage.getItem("store"))))
    }

    //在页面刷新时将vuex里的信息保存到localStorage里
    window.addEventListener("beforeunload",()=>{
        localStorage.setItem("store",JSON.stringify(this.$store.state))
    })
}


注:
    this.$store.replaceState()  用于替换 store 的信息(状态合并)。
    Object.assign(target, ...source)  将source的值 赋给 target,若有重复的数据,则覆盖。其中...表示可以多个source。
    JSON.stringify()  用于将对象转为 JSON
    JSON.parse()   用于将 JSON 转为对象

注意:

若有两个组件,当调用 localstorage 的值,可能会出现问题。

如下图,Main.vue 中 每次刷新页面会 触发 localstorage 操作。

开始 localstorage 中没值,某用户通过 Login.vue 组件 进入 Main.vue 组件并刷新页面后,localStorage 会记录当前用户相关的 state 信息。

直接在浏览器中切换路径到Login.vue。当另外一个用户通过 Login.vue 并进入 Main.vue 时,此时获取的就是上一个用户的信息,这样肯定会出问题(我遇到的一个坑,大致意思就是这样)。

一个暴力的解决思路,在Login.vue中 直接将上一个用户缓存的信息给删除。
此时 localStorage 没有了上个用户的信息。
【Login.vue】
created() {
    // 进入画面前,移除主页面保存的 state 信息
    localStorage.removeItem("store")
}

然后只在Main组件刷新时 使用 localStorage 记录信息。
【Main.vue】
created() {
    //在页面加载时读取localStorage里的状态信息
    if (localStorage.getItem("store") ) {
        this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(localStorage.getItem("store"))))
    }

    //在页面刷新时将vuex里的信息保存到localStorage里
    window.addEventListener("beforeunload",()=>{
        localStorage.setItem("store",JSON.stringify(this.$store.state))
    })
}

2、sessionStorage

也可以使用 sessionStorage 来保存信息。

【在某组件中添加如下钩子函数。比如 App.vue中】
created() {
    //在页面加载时读取sessionStorage里的状态信息
    if (sessionStorage.getItem("store") ) {
        this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(sessionStorage.getItem("store"))))
    }

    //在页面刷新时将vuex里的信息保存到sessionStorage里
    window.addEventListener("beforeunload",()=>{
        sessionStorage.setItem("store",JSON.stringify(this.$store.state))
    })
}

3、localstorage 与 sessionStorage 的区别

  • (1)localstorage 与 sessionStorage 都是客户端用于存储数据的。
  • (2)localStorage是没有失效时间的,sessionStorage的声明周期是浏览器的生命周期。
  • (3)当浏览器关闭时,sessionStorage的数据将清空,而localStorage数据只要不通过代码特意的删除或手动删除,是永久保存的。
  • (4)若想清除localstorage 的数据。
localStorage.removeItem(key)       清除一条数据
localStorage.clear()               清除全部的数据

 以上所述是小编给大家介绍的解决vue页面刷新vuex中state数据丢失的问题,希望对大家有所帮助。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 在vue中阻止浏览器后退的实例

    在vue中阻止浏览器后退的实例

    今天小编就为大家分享一篇在vue中阻止浏览器后退的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • VUE html5-qrcode实现H5扫一扫功能实例

    VUE html5-qrcode实现H5扫一扫功能实例

    这篇文章主要给大家介绍了关于VUE html5-qrcode实现H5扫一扫功能的相关资料,html5-qrcode是轻量级和跨平台的QR码和条形码扫码的JS库,集成二维码、条形码和其他一些类型的代码扫描功能,需要的朋友可以参考下
    2023-08-08
  • Vue项目中如何引入本地第三方JS库

    Vue项目中如何引入本地第三方JS库

    vue中常遇到第三方js,这篇文章主要给大家介绍了关于Vue项目中如何引入本地第三方JS库的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • vue element 多图片组合预览的实现

    vue element 多图片组合预览的实现

    本文主要介绍了vue element多图片预览实现的相关资料,最近的项目中有图片预览的场景,本文就来介绍一下如何使用,感兴趣的可以了解一下
    2023-08-08
  • vue easytable组件使用详解

    vue easytable组件使用详解

    Vue Easytable是一个基于Vue.js的数据表格组件库,它提供丰富的功能和灵活的配置,帮助开发者快速搭建复杂的数据表格界面,这篇文章主要介绍了vue easytable组件使用,需要的朋友可以参考下
    2023-09-09
  • vue router 配置路由的方法

    vue router 配置路由的方法

    这篇文章主要介绍了vue router 配置路由的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue引入微信sdk 实现分享朋友圈获取地理位置功能

    vue引入微信sdk 实现分享朋友圈获取地理位置功能

    这篇文章主要介绍了h5 vue引入微信sdk 实现分享朋友圈,分享给朋友,获取地理位置功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • vue项目中的webpack-dev-sever配置方法

    vue项目中的webpack-dev-sever配置方法

    下面小编就为大家分享一篇vue项目中的webpack-dev-sever配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Vue实现省市区三级联动el-select组件的示例代码

    Vue实现省市区三级联动el-select组件的示例代码

    这篇文章主要为大家详细介绍了Vue实现省市区三级联动el-select组件的方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的的可以参考一下
    2023-02-02
  • Vue3目录调整方案详解

    Vue3目录调整方案详解

    默认生成的目录结构不满足我们的开发需求,所以这里需要做一些自定义改动,本文给大家分享Vue3目录调整方案,感兴趣的朋友一起看看吧
    2023-11-11

最新评论