使用vuex解决刷新页面state数据消失的问题记录


Posted in Javascript onMay 08, 2019

在实际的vue项目中,当我们的应用遇到多个组件之间的共享问题时,通常会用到Vuex(一个状态管理的插件,可以解决不同组件之间的数据共享和数据持久化),解决组件之间同一状态的共享问题。

因子:

  • Vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。
  • Vuex劣势:在刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。

言而总之:

实际问题:在vue项目中,使用Vuex做状态管理时,调试页面时,刷新后state上的数据消失了,该如何解决?

解决思路:将state中的数据放在浏览器sessionStorage和localStorage

解决办法:

存储到localStorage

通过监听页面的刷新操作,即beforeunload前存入本地localStorage,页面加载时再从本地localStorage读取信息
在App.vue中加入下面代码

created(){
 //在页面刷新时将vuex里的信息保存到localStorage里
  window.addEventListener("beforeunload",()=>{
   localStorage.setItem("messageStore",JSON.stringify(this.$store.state))
  })
  
 //在页面加载时读取localStorage里的状态信息
  localStorage.getItem("messageStore") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("messageStore"))));
 }

使用vuex-persistedstate 插件

安装插件:npm install vuex-persistedstate --save

配置:

在store的index.js中,手动引入插件并配置

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState()]
})

该插件默认持久化所有state,当然也可以指定需要持久化的state:

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState({
  storage: window.sessionStorage,
  reducer(data) {
   return {
   // 设置只储存state中的myData
   myData: data.myData
  }
  }
 })]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
javascript学习笔记(四)function函数部分
Sep 30 Javascript
node.js中的fs.writeFileSync方法使用说明
Dec 14 Javascript
js数组依据下标删除元素
Apr 14 Javascript
Javascript递归打印Document层次关系实例分析
May 15 Javascript
简单实现js页面切换功能
Jan 10 Javascript
深入理解Angular2 模板语法
Aug 07 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
基于Vue实现图书管理功能
Oct 17 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 Javascript
vue项目实现分页效果
Mar 24 Vue.js
微信小程序网络层封装的实现(promise, 登录锁)
May 08 #Javascript
详解微信小程序的不同函数调用的几种方法
May 08 #Javascript
微信小程序Page中data数据操作和函数调用方法
May 08 #Javascript
vue中使用props传值的方法
May 08 #Javascript
vue权限问题的完美解决方案
May 08 #Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 #Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 #Javascript
You might like
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
js读写json文件实例代码
2014/10/21 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
Python2随机数列生成器简单实例
2017/09/04 Python
机器学习python实战之决策树
2017/11/01 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
深入理解Python异常处理的哲学
2019/02/01 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
python os.rename实例用法详解
2020/12/06 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
秋季红领巾广播稿
2014/01/27 职场文书
安全目标管理责任书
2014/07/25 职场文书
模范教师材料大全
2014/12/16 职场文书
英语教师个人总结
2015/02/09 职场文书
理想国读书笔记
2015/06/25 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL