使用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 相关文章推荐
Javascript解决常见浏览器兼容问题的12种方法
Jan 04 Javascript
js中获取事件对象的方法小结
Mar 13 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
Sep 20 Javascript
JS完成代码前最好对其做5件事
Apr 07 Javascript
JQuery实现鼠标移动到图片上显示边框效果
Jan 09 Javascript
jquery处理json数据实例分析
Jun 03 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
如何利用模板将HTML从JavaScript中抽离
Oct 08 Javascript
JS实现“隐藏与显示”功能(多种方法)
Nov 24 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
webpack开发环境和生产环境的深入理解
Nov 08 Javascript
JavaScript 生成唯一ID的几种方式
Feb 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数据库配置文件一般做法分享
2012/07/07 PHP
php实现httpRequest的方法
2015/03/13 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
node.js中watch机制详解
2014/11/17 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
先进集体事迹材料
2014/02/17 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android