解决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 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
JavaScript 编程引入命名空间的方法
Jun 29 Javascript
ajaxControlToolkit AutoCompleteExtender的用法
Oct 30 Javascript
js移除事件 js绑定事件实例应用
Nov 28 Javascript
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
使用原生JS实现弹出层特效
Dec 22 Javascript
javascript闭包的理解
Apr 01 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
vue嵌套路由与404重定向实现方法分析
May 04 Javascript
在react中使用vuex的示例代码
Jul 30 Javascript
webpack多入口多出口的实现方法
Aug 17 Javascript
小程序server请求微信服务器超时的解决方法
May 21 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
第十三节--对象串行化
2006/11/16 PHP
php读取msn上的用户信息类
2008/12/05 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
Python可以用来做什么
2020/11/23 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
大二自我鉴定
2014/01/31 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
走进敬老院活动总结
2014/07/10 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
英语教师个人总结
2015/02/09 职场文书
整改通知书格式
2015/04/22 职场文书
高中生物教学反思
2016/02/20 职场文书