使用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 相关文章推荐
【消息提示组件】,兼容IE6/7&&FF2
Sep 04 Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
JS解决ie6下png透明的方法实例
Aug 02 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
Aug 31 Javascript
JavaScript类的写法
Sep 17 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
Apr 01 Javascript
js实现登录与注册界面
Nov 01 Javascript
vuex与组件联合使用的方法
May 10 Javascript
jQuery实现本地存储
Dec 22 jQuery
微信小程序网络层封装的实现(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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
JavaScript闭包详解
2015/02/02 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vue axios请求超时的正确处理方法
2018/04/02 Javascript
深入了解js原型模式
2019/05/30 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
Python实现KNN邻近算法
2021/01/28 Python
python实现微信小程序自动回复
2018/09/10 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
python如何输出反斜杠
2020/06/18 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
环保公益策划方案
2014/08/15 职场文书
夏季药店促销方案
2014/08/22 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Linux安装apache服务器的配置过程
2021/11/27 Servers
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python