使用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 相关文章推荐
复选框全选与全不选操作实现思路
Aug 18 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
Javascript中浏览器窗口的基本操作总结
Aug 18 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
Oct 10 Javascript
JS实现“隐藏与显示”功能(多种方法)
Nov 24 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
微信公众号网页分享功能开发的示例代码
May 27 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
一个程序下载的管理程序(一)
2006/10/09 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
Django卸载之后重新安装的方法
2017/03/15 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
如何在Shell脚本中使用函数
2015/09/06 面试题
寄语学生的话
2014/04/10 职场文书
项目投资合作意向书
2014/07/29 职场文书
交通事故和解协议书
2014/09/25 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL