使用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 相关文章推荐
我见过最全的个人js加解密功能页面
Dec 12 Javascript
JS 参数传递的实际应用代码分析
Sep 13 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
JQuery删除DOM节点的方法
Jun 11 Javascript
Bootstrap table表格简单操作
Feb 07 Javascript
浅谈JsonObject中的key-value数据解析排序问题
Dec 06 Javascript
JS温故而知新之变量提升和时间死区
Jan 27 Javascript
详解vue-cli中使用rem,vue自适应
May 06 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 Javascript
Openlayers实现图形绘制
Sep 28 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 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实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
JS的get和set使用示例
2014/02/20 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
Python实现把类当做字典来访问
2019/12/16 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
高中生学习生活的自我评价
2013/10/09 职场文书
新员工欢迎词
2014/01/12 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
稽核岗位职责范本
2015/04/13 职场文书
食品药品安全责任书
2015/05/11 职场文书
村主任当选感言
2015/08/01 职场文书
Nginx实现会话保持的两种方式
2022/03/18 Servers