vuex数据状态持久化问题

 更新时间:2023年10月10日 09:20:25   作者:前端小白在写bug  
这篇文章主要介绍了vuex数据状态持久化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在VUE项目中,由于是单页应用,vuex中的数据在页面刷新时就会被清除,所以我们要考虑怎样让vuex中的数据持久保存在浏览器中,至少不能每次刷新时都丢失登录状态。

本文介绍VUE项目中常用到的两种vuex持久化的方法,底层实现原理一直,方法不太一样,可以在项目中根据实际来区分

方法一、浏览器监听+本地存储

我们可以监听浏览器的刷新,在页面刷新时将vuex内的数据保存在本地存储中(根据项目需要可以考虑保存在sessionStorage或者localStorage中)

在App.vue中,created生命周期写我们的监听方法

window.addEventListener("beforeunload", () => {
    	sessionStorage.setItem("store", JSON.stringify(this.$store.state))
    })

然后在进入到created生命周期时,去到sessionStorage/localStorage中的数据,将数据替换到vuex中

if(sessionStorage.getItem("store")) {
    	this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
    }

整体来说明一下代码

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))
    })
  },

这个方法的好处是不需要借助其他三方组件库,实现vuex全量数据持久化,坏处是所有数据保存在本地,会有一些较敏感数据容易被查看到,另外如果做某些指定数据持久化时会比较麻烦,所以下面介绍第二种更为简单的方法

方法二、状态持久化插件

推荐使用 vuex-persistedstate 插件

使用方法

如下:

1、在项目中安装该插件

cnpm i --save vuex-persistedstate

2、在 src/store/index.js中引入该插件

import createPersistedState from 'vuex-persistedstate'

在vuex中使用

plugins: [createPersistedState()]

整体代码

如下:

import Vue from 'vue'
	import Vuex from 'vuex'
	import createPersistedState from 'vuex-persistedstate'
	Vue.use(Vuex)
	export default new Vuex.Store({
	  plugins: [createPersistedState({
	    storage: window.sessionStorage, // 默认位置是 localStorage
	    reducer: (state) => {
	      return {
	        // 默认是全部缓存,在这里可以设置需要缓存的状态
	        token: state.token
	      }
	    }
	  })],
	  state: {
	    token: ''
	  },
	  mutations: {
	  },
  }

优点:

1、可以更便捷设置存储位置 为sessionStorage或者 localStorage中,默认为 localStorage

2、可以更便捷设置需要存储的内容,如当需要存储token时,只需要将token放入进入即可

总结

本文插件只简单概述了一下状态持久化插件的用法,还有更多用法并未用到,在此并未讲述,有兴趣的朋友可以此插件github地址做更多了解(当然还有很多其他很好用的插件和方法,本文只提到了我自己项目中使用过的)

好了,以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用vue + koa2 + mockjs模拟数据的方法教程

    利用vue + koa2 + mockjs模拟数据的方法教程

    这篇文章主要给大家介绍了关于利用vue + koa2 + mockjs模拟数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 在vue中使用setInterval的方法示例

    在vue中使用setInterval的方法示例

    这篇文章主要介绍了在vue中使用setInterval的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Vue组件中常见的props默认值陷阱问题

    Vue组件中常见的props默认值陷阱问题

    这篇文章主要介绍了避免Vue组件中常见的props默认值陷阱,本文通过问题展示及解决方案给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • gulp模块使用方法示例详解

    gulp模块使用方法示例详解

    这篇文章主要为大家介绍了gulp模块使用方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 基于vue-draggable 实现三级拖动排序效果

    基于vue-draggable 实现三级拖动排序效果

    这篇文章主要介绍了基于vue-draggable 实现三级拖动排序效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 基于WebRTC实现音视频通话功能

    基于WebRTC实现音视频通话功能

    WebRTC作为一种开放标准的实时通信协议,能轻松实现浏览器之间的实时音视频通信,本次主要分享基于WebRTC的音视频通话技术,讲解WebRTC原理和音视频传输等关键概念,通过案例实践,带大家掌握如何搭建一个音视频通话应用,需要的朋友可以参考下
    2024-05-05
  • Vue实现动态显示表单项填写进度功能

    Vue实现动态显示表单项填写进度功能

    这篇文章主要介绍了Vue实现动态显示表单项填写进度功能,此功能可以帮助用户了解表单填写的进度和当前状态,提高用户体验,通常实现的方式是在表单中添加进度条,根据用户填写状态动态更新进度条,感兴趣的同学可以参考下文
    2023-05-05
  • Vue computed计算属性的使用方法

    Vue computed计算属性的使用方法

    这篇文章主要为大家详细介绍了Vue computed计算属性的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 前端uniapp微信小程序跨域问题的解决方法

    前端uniapp微信小程序跨域问题的解决方法

    跨域指的是在浏览器中,当一个网页尝试加载另一个不同域名(或协议、端口号)下的资源时所面临的限制,这篇文章主要给大家介绍了关于前端uniapp微信小程序跨域问题的解决方法,需要的朋友可以参考下
    2024-08-08
  • vue实现在线预览pdf文件和下载(pdf.js)

    vue实现在线预览pdf文件和下载(pdf.js)

    这篇文章主要为大家详细介绍了vue实现在线预览pdf文件和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论