解决vuex刷新数据消失问题


Posted in Javascript onNovember 12, 2020

前言

vue构建的单页大型项目中,可能会用到Vuex 。Vuex 的状态存储是响应式的,当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

但是有一个问题就是:vuex的存储的数据只是在页面的中,相当于我们定义的全局变量,刷新之后,里边的数据就会恢复到初始化状态。但是这个情况有时候并不是我们所希望的。

比如,用户已经登录了,我把登录状态放到state中了,一刷新页面,还要重新登录?购物车里的添加的数据,一刷新要重新添加?

解决思路:

监听页面是否刷新,如果页面刷新了,将state对象存入到sessionStorage/localStorage中。

页面打开之后,判断sessionStorage/localStorage中是否存在state对象,如果存在,则说明页面是被刷新过的,将sessionStorage/localStorage中存的数据取出来给vuex中的state赋值。

如果不存在,说明是第一次打开,则取vuex中定义的state初始值。

sessionStorage和localStorage介绍

H5提供了我们常用的localStorage和sessionStorage。

两者的区别:localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。

存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。

存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

源生接口可以接受,亦可再次封装来对Object和Array有更好的支持。浏览器的支持除了IE7及以下不支持外,其他标准浏览器都完全支持(ie及FF需在web服务器里运行)

解决vuex刷新数据消失问题

localStorage和sessionStorage都具有相同的操作方法,例如setItem、getItem、removeItem、clear等。

代码:

项目目录结构:

解决vuex刷新数据消失问题

在项目的入口页面(App.vue)里添加监听刷新事件:

name: 'App',
 mounted () {
 window.addEventListener('unload', this.saveState)
 },
 methods: {
 saveState () {
  sessionStorage.setItem('state', JSON.stringify(this.$store.state))
 }
 }

store里有可能存储了一些涉密的信息,所以一直在 sessionStorage放着不是太好,页面加载完成后,清空或者删除指定的session。

window.addEventListener("load", () => {
  sessionStorage.clear();
 });

state.js:

var state = sessionStorage.getItem('state') ? JSON.parse(sessionStorage.getItem('state')) : {
 count: 1,
 obj: {},
 arr: [1, 2, 3]
}
export default state

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import state from './states'
import mutations from './mutations'
import getters from './getters'
import actions from './actions'
Vue.use(Vuex)
export default new Vuex.Store({
 state,
 mutations,
 getters,
 actions
})

mutations.js:

import {
 SOME_MUTATION
} from './mutation-types.js'
 
export default {
 [SOME_MUTATION] (state) {
 state.count++
 }
}

mutation-types.js

export const SOME_MUTATION = 'SOME_MUTATION'

补充知识:vuex-along有效防止刷新页面后vuex中的数据重置

1.vuex-along安装

npm i vuex-along --save

2.在store目录下的index.js文件中引入

2.1

import {createVuexAlong} from 'vuex-along'

2.2直接上图

解决vuex刷新数据消失问题

简单说明其中的含义:

name:“”“”

//在这块我存入的是localstorage,代表localstorage的键值

local:{list:["userInfo"],isFilter:true}

//list:要过滤的vuex中的数据,isFilter代表将userInfo滤过,其余存进localstorage

session:false

//对于sessionstorage不进行任何操作

更加详细信息借助github进行了解:https://github.com/boenfu/vuex-along

3.以上这篇解决vuex刷新数据消失问题就是小编分享给大家的全部内容了,希望对各位将来的大佬有所帮助!也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery下checked取值问题的解决方法
Aug 09 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
Nov 04 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 Javascript
原生javaScript实现图片延时加载的方法
Dec 22 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
Nov 24 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
vue + element-ui的分页问题实现
Dec 17 Javascript
Vue源码解析之数据响应系统的使用
Apr 24 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
Jun 28 Javascript
浅谈es6中的元编程
Dec 01 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 #Javascript
解决vuex改变了state的值,但是页面没有更新的问题
Nov 12 #Javascript
javascript实现搜索筛选功能实例代码
Nov 12 #Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 #Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
Nov 12 #Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 #Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 #Javascript
You might like
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
详解PHP队列的实现
2019/03/14 PHP
用js重建星际争霸
2006/12/22 Javascript
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
vue自定义树状结构图的实现方法
2020/10/18 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
网游商务专员求职信
2013/10/15 职场文书
超市业务员岗位职责
2013/12/05 职场文书
文艺晚会策划方案
2014/06/11 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
sql server 累计求和实现代码
2022/02/28 SQL Server
海弦WR-800F
2022/04/05 无线电
python实现简单的三子棋游戏
2022/04/28 Python