解决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 (三) 管理jQuery包装集
Feb 23 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
js获取当前页面路径示例讲解
Jan 08 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
解决vue移动端适配问题
Dec 12 Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 Javascript
Vue中component标签解决项目组件化操作
Sep 04 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
Aug 14 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函数in_array()使用详解
2014/08/20 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
canvas实现钟表效果
2017/02/13 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
几道Java和数据库的面试题
2013/05/30 面试题
毕业自我鉴定怎么写
2014/03/25 职场文书
我爱我校演讲稿
2014/05/21 职场文书
企业活动策划方案
2014/06/02 职场文书
商场周年庆活动方案
2014/08/19 职场文书
出差报告范文
2014/11/06 职场文书
学校世界艾滋病日宣传活动总结
2015/05/05 职场文书
今日说法观后感
2015/06/08 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
节约用水广告语60条
2019/11/14 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js