解决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 相关文章推荐
网页的标准,IMG不支持onload标签怎么办
Jun 29 Javascript
jcrop基本参数一览
Jul 16 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
JS字符串false转boolean的方法(推荐)
Mar 08 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
Node.js 的模块知识汇总
Aug 16 Javascript
Vue Element使用icon图标教程详解(第三方)
Feb 07 Javascript
原生js实现拖拽功能基本思路详解
Apr 18 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 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单例模式实现(对象只被创建一次)
2012/12/05 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
jquery拖动改变div大小
2017/07/04 jQuery
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
python基于递归解决背包问题详解
2019/07/03 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
试用期自我评价范文
2015/03/10 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
同事去世追悼词
2015/06/23 职场文书
追悼会悼词大全
2015/06/23 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
总结Python常用的魔法方法
2021/05/25 Python