使用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实现页面实时显示当前时间的简单实例
Jul 20 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
使用变量动态设置js的属性名
Oct 19 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
浅谈html转义及防止javascript注入攻击的方法
Dec 04 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
js制作简单的音乐播放器的示例代码
Aug 28 Javascript
微信小程序slider组件使用详解
Jan 31 Javascript
windows实现npm和cnpm安装步骤
Oct 24 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 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中的闭包和匿名函数
2017/12/25 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
基于Python os模块常用命令介绍
2017/11/03 Python
python在非root权限下的安装方法
2018/01/23 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python中字符串List按照长度排序
2019/07/01 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
Python yield的用法实例分析
2020/03/06 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
性能测试工程师的面试题
2015/02/20 面试题
简单的辞职信范文
2014/01/18 职场文书
竞聘书模板
2014/03/31 职场文书
男女朋友协议书
2014/04/23 职场文书
建筑安全标语
2014/06/07 职场文书
商务宴会祝酒词
2015/08/11 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers