解决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 相关文章推荐
Maps Javascript
Jan 22 Javascript
建立良好体验度的Web注册系统ajax
Jul 09 Javascript
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
javascript 事件处理程序介绍
Jun 27 Javascript
jQuery 获取浏览器所在的IP地址的小例子
Nov 08 Javascript
js原型继承的两种方法对比介绍
Mar 30 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
May 14 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
Feb 14 Javascript
如何理解Vue的render函数的具体用法
Aug 30 Javascript
angular之ng-template模板加载
Nov 09 Javascript
vue使用echarts图表的详细方法
Oct 22 Javascript
Javascript中async与await的捕捉错误详解
Mar 03 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缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
10条php编程小技巧
2015/07/07 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
网络安全方面的面试题
2016/01/07 面试题
新媒传信软件测试面试题
2013/02/24 面试题
增员口号大全
2014/06/18 职场文书
2014年教研组工作总结
2014/11/26 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书