使用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 相关文章推荐
常用参考资料(手册)下载或者链接
Jul 22 Javascript
Track Image Loading效果代码分析
Aug 13 Javascript
javascript div 弹出可拖动窗口
Feb 26 Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
Nov 30 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 Javascript
AngularJS 指令的交互详解及实例代码
Sep 14 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
JavaScript字符串对象
Jan 14 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
Apr 02 jQuery
vue v-model的用法解析
Oct 19 Javascript
微信小程序网络层封装的实现(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生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
js 目录列举函数
2008/11/06 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
Python的垃圾回收机制深入分析
2014/07/16 Python
简析Python的闭包和装饰器
2016/02/26 Python
python3音乐播放器简单实现代码
2020/04/20 Python
python将回车作为输入内容的实例
2018/06/23 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
Python读写锁实现实现代码解析
2020/11/28 Python
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
新浪网技术部笔试题
2016/08/26 面试题
自我鉴定四大框架
2014/01/17 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电