使用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 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
JavaScript不刷新实现浏览器的前进后退功能
Nov 05 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
Mar 07 Javascript
基于javascript实现九九乘法表
Mar 27 Javascript
Vue.js每天必学之计算属性computed与$watch
Sep 05 Javascript
js定时器实例分享
Dec 20 Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 Javascript
Vue入门之数量加减运算操作示例
Dec 11 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
vue-cli 为项目设置别名的方法
Oct 15 Javascript
Preload基础使用方法详解
Feb 03 Javascript
vue+animation实现翻页动画
Jun 29 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中一些可能会被忽略的问题
2013/06/21 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python 文件重命名工具代码
2009/07/26 Python
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
初步理解Python进程的信号通讯
2015/04/09 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
如何基于Python按行合并两个txt
2020/11/03 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
高级人员简历的自我评价分享
2013/11/03 职场文书
电子信息专业学生自荐信
2013/11/09 职场文书
师范大学毕业自我鉴定
2013/11/21 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
拾金不昧感谢信
2015/01/21 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers
React更新渲染原理深入分析
2022/12/24 Javascript