Vuex页面刷新数据丢失的问题
创始人
2025-05-31 08:50:59

为什么说刷新页面vuex的数据会丢失

刷新页面vuex的数据会丢失属于正常现象,(vuex的数据并不是弄丢了,而是初始化了,回到初始值,回到原点了).因为JS的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面,以前堆栈申请的内存被释放,这就是浏览器的运行机制,那么堆栈里的数据自然就清空了。

解决办法?

方法一:

将state的数据保存在localstorage,sessionstorage或cookie中。

  • 在app.vue的created方法中读取sessionstorage中的数据存储在store中,此时用vuex.store的replaceState方法,替换store的根状态

  • 在beforeunload方法中将store.state存储到sessionstorage中。

export default {name: 'app',created () {// 在页面加载时读取sessionStorageif (sessionStorage.getItem('store')) {this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))}// 在页面刷新时将store保存到sessionStorage里window.addEventListener('beforeunload', () => {sessionStorage.setItem('store', JSON.stringify(this.$store.state))})}
}

方法二:

使用vuex-persistedstate,可以自动存储。

下载:

npm install --save vuex-persistedstate

使用:

在store.js中引入
import createPersistedState from 'vuex-persistedstate'export default new Vuex.Store({state: {count: 1},//配置 // 当state中的值发生改变,此时localStorage中的vuex的值会同步把state中的所有值存储起来,当页面刷新的时候,state的值会从localStorage自动获取vuex的value值,赋值到state中plugins: [createPersistedState()]
})

默认的是存储到localStorage里的,我们也可以存到sessionStorage中,如:

import createPersistedState from 'vuex-persistedstate'export default new Vuex.Store({state: {count: 1},//配置plugins: [createPersistedState({storage: window.sessionStorage})]
})

使用vuex-persistedstate指定需要持久化的state

import createPersistedState from "vuex-persistedstate"const store = newVuex.Store({state: {count: 0
},mutations: {},actions: {},plugins: [createPersistedState({storage:window.sessionStorage,reducer(val)  {// 此时,当count发生改变的时候,就会调用此函数,并且val的值为当前state对象,return的值为当前本地存储的value值(本地存储的key值为vuex)return {count: val.count,changeCount: 'aaa'}}})]
})

总结

  • Vuex只是在内存保存状态,刷新之后就会丢失,如果要持久化就要存起来。

  • localStorage就很适合,提交mutation的时候同时存入localStorage,store中把值取出作为state的初始值即可。

  • 这里有两个问题,不是所有状态都需要持久化;如果需要保存的状态很多,编写的代码就不够优雅,每个提交的地方都要单独做保存处理。这里就可以利用vuex提供的subscribe方法做一个统一的处理。甚至可以封装一个vuex插件以便复用。

  • 类似的插件有vuex-persist、vuex-persistedstate,内部的实现就是通过订阅mutation变化做统一处理,通过插件的选项控制哪些需要持久化

相关内容

热门资讯

郎酒,在端午奏响一曲“心曲” 赤水河畔,端午风暖。 5月31日,郎酒庄园内,一年一度的端午制曲大典如期而至。今年端午的郎酒庄园,格...
蔚来公司5月交付新车23231... 新京报贝壳财经讯 6月1日,据蔚来官方微博消息,2025年5月,蔚来公司交付新车23231台,同比增...
智慧轨道交通运维监控解决方案         交通作为国民经济和社会发展的基础性、先行性产业,在整个社会经济、民生发...
GIT版本控制工具 Git版本控制工具 第一章 版本控制工具简介 1.版本控制工具的发展历史经过: 原始人工维护状态&#...
d的模板别名问题 原文 struct Matrix(S, size_t M, size_t N){}alias Vec...
Visual Studio更改... 目录:问题描述一、进入VS界面二、更改并下载.Net Framework目标框架三、N...
鲁政委:贸易环境缓和,产需指数... 鲁政委 郭于玮 张励涵(鲁政委系兴业银行首席经济学家、中国首席经济学家论坛理事)PMI5月制造业、服...
RK3588 Android1... 调试前先找模块厂获取相关资料Kernel修改:供电引脚,我是自己写的驱动...
SQL:exists/not ... exists/not existsselect * from table_name where [n...
mysql-windows安装... 下载 https://mirrors.tools.huawei.com/mysql/Download...
C++IO流(1) @TOC C++IO流 C++流 流就是若干字节组成字节序...
燕翔:5月份PMI数据点评:P... 燕翔 朱成成 许茹纯 杨文吉(燕翔 系方正证券首席经济学家、中国首席经济学家论坛理事)核心结论5月份...
高瑞东:“抢出口”带动制造业P... 高瑞东 刘星辰(高瑞东 系光大证券首席经济学家、中国首席经济学家论坛理事)核心观点事件:2025年5...
GuLi商城-SpringCl... 当微服务数量很庞大时,将所有配置都书写到一个配置文件中,显然不是太合适。...
1.freertos应用系列之... freertos应用全系列(写完关联更新) 01.freertos应用系...
CSS的浮动(上) 🌟所属专栏:前端只因变凤凰之路🐔作者简介:...
上市首秀后,霸王茶姬能睡个好觉... 5月30日晚,不久前赴美上市的霸王茶姬发布了上市以来首份季度财报,GMV、净收入和利润等关键经营数据...
AI工具(ChatGPT)常用... 要国内使用AI工具,关注:码视野,回复:10...
工业控制系统背景与概述 工业控制系统背景与概述工业控制系统的背景工业控制系统的重要性工业控制系统的应用工业控制系统的未来发展...
分布式Id的5种应用场景 UUID优点:(1)使用简单(2࿰...
1.5亿就能帮大厂改命了? 1... 出品|虎嗅黄青春频道作者|商业消费主笔黄青春题图|视觉中国5月27日港股盘后,快手向市场递上2025...
循环神经网络(二)(简单循环神... 文章目录简单循环神经网络模型定义模型特点理解简单循环神经网络NumPy 实现keras 实现Refe...
让项目干系人满意的3大要点         1、提升核心干系人的体验         关于项目干系人的分析识别以及相关权利利益矩...
八旬老人花105万买基金亏了3... 红星资本局6月1日消息,近日,裁判文书网披露的一份终审民事判决书显示,一位年过八旬的投资者在2021...
【算法系列之回溯算法】leet... 39. 组合总和 力扣题目链接 给你一个 无重复元素 的整数数组 candidates 和一个目标整...
js值的比较 值的比较 前言: 本篇文章主要介绍了 js 类型值的比较以及相等性检查,...
美国贸易代表办公室延长对中国3... 政策速递经济观察网讯 当地时间5月31日,美国贸易代表办公室宣布,延长对中国在技术转让、知识产权和...
机器学习的模型评估 模型评估 模型分为分类模型 和回归模型 模型简介 类别评估方法简介分类模型准确率(Ac...
赤诚生物终止北交所IPO 原拟... 中国经济网北京6月1日讯 北交所网站2025年5月30日披露关于终止对五峰赤诚生物科技股份有限公司(...
赛事运动激活文旅经济,产业升级... 中国商报(记者 王怡菲)5月15日,国务院召开的做强国内大循环工作推进会强调,要“以国内大循环的内在...