使用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(二) 事件机制(1)
Nov 25 Javascript
JQuery1.6 使用方法三
Nov 23 Javascript
javascript实现window.print()去除页眉页脚
Dec 30 Javascript
javascript实现table表格隔行变色的方法
May 13 Javascript
JQuery中上下文选择器实现方法
May 18 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
May 19 Javascript
jQuery 3.0十大新特性
Jul 06 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
你不可不知的Vue.js列表渲染详解
Oct 01 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
Dec 08 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中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
详解YII关联查询
2016/01/10 PHP
orm获取关联表里的属性值
2016/04/17 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
对xmlHttp对象的理解
2011/01/17 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
全面了解python字符串和字典
2016/07/07 Python
python 编写简单网页服务器的实例
2018/06/01 Python
python中的tcp示例详解
2018/12/09 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Python类及获取对象属性方法解析
2020/06/15 Python
优秀的教师个人的中文求职信
2013/09/21 职场文书
材料采购员岗位职责
2013/12/17 职场文书
2014的自我评价
2014/01/13 职场文书
八年级美术教学反思
2014/02/02 职场文书
拆迁委托协议书
2014/09/15 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
毕业班工作总结
2015/08/10 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
pandas数值排序的实现实例
2021/07/25 Python
Python Pandas 删除列操作
2022/03/16 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs