使用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 相关文章推荐
window.showModalDialog使用手册
Jan 11 Javascript
十分钟打造AutoComplete自动完成效果代码
Dec 26 Javascript
JQUERY获取form表单值的代码
Jul 17 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
Apr 12 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
JS实现的二叉树算法完整实例
Apr 06 Javascript
微信小程序 setData 对 data数据影响问题
Apr 18 Javascript
微信小程序实现收货地址左滑删除
Nov 18 Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 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安装全攻略:APACHE
2006/10/09 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
JS数据类型判断的几种常用方法
2020/07/07 Javascript
Python标准库shutil用法实例详解
2018/08/13 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
影视制作岗位职责
2013/12/04 职场文书
留学自荐信写作方法
2014/01/27 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
高一学生评语大全
2014/04/25 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android