使用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 相关文章推荐
jQuery中将函数赋值给变量的调用方法
Mar 23 Javascript
jQuery下通过replace字符串替换实现大小图片切换
May 22 Javascript
实现只能输入数字的input不用replace方法
Sep 12 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
Oct 20 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
Dec 16 Javascript
javascript 获取元素样式必杀技
May 04 Javascript
javascript截取字符串小结
Apr 28 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
移动端js触摸事件详解
Sep 18 Javascript
Javascript创建类和对象详解
May 31 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
微信小程序网络层封装的实现(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中文字符截取防乱码
2008/03/28 PHP
php伪静态之APACHE篇
2014/06/02 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python while循环使用else语句代码实例
2020/02/07 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
创业女性典型材料
2014/05/02 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
2014年班主任工作总结
2014/11/08 职场文书
董事长新年致辞
2015/07/29 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技