近期做项目的过程中,使用vuex保存页面公共数据,测试无网情况后又接通网络的情况下,页面进行重新加载。遇到一个小bug——发现在苹果手机IOS系统下,页面刷新重新加载后页面中通过vuex存储并显示的数据丢失了。

  下面先介绍一下产生这种情况的原因:

  1. js代码是运行在内存中的,代码运行时的所有变量、函数都是保存在内存中。
  2. 刷新页面,以前申请的内存被释放,重新加载脚本代码,变量要重新赋值。
  3. 要想刷新后数据不丢失就必须把数据存储在外部,例如:Local Storage、Session Storage、Index DB等。这些都是浏览器提供的API,让你可以将数据存储在硬盘上,做持久化存储。

  

  接着我们介绍两种解决上述问题的方案:

一、借用客户端本地存储方案localStorage

  具体实现描述:

  • 在对state数据进行初始化时,从localStorage中取出对应的值。
  • 在mutations中添加将相应数据存储至localStorage中的操作。

  代码如下:

state: {
// 初始化时从localStorage中取值,没有初始值时置为空数组
pmh: localStorage.getItem('pmh')||[]
},
mutations: {
SET_PMH: (state, pmh) => {
state.pmh = pmh
// 修改state中数据的同时,在localStorage中进行存储
localStorage.setItem('pmh',pmh)
}
}

  

二、通过vuex的数据缓存插件vue-savedata

  具体实现描述:

  1. 先安装vue-savedata

    • npm install vue-savedata  或  yarn add vue-savedata
  2. 在store中使用
import saveData from 'vue-savedata'

const store = new Vuex.Store({
state: {
selected: {},
},
mutations: {
setSelected(state, payload) {
state.selected = payload
},
},
//缓存所有store数据到本地 也可以单独缓存
plugins: [saveData()],
}) export default store;

  

  

Vuex踩坑--数据刷新时丢失的更多相关文章

  1. 解决vuex保存的数据刷新页面时清空

    参考文章: vuex中store保存的数据,刷新页面会清空 主要解决代码: 1.更改store文件下index文件state的定义 const store = new Vuex.Store({ sta ...

  2. vue-cli 项目踩坑 npm install 时出错

    1.报错如下: 2.此时你执行npm run dev  / npm run build 会报错如下 npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! v ...

  3. 一次flume exec source采集日志到kafka因为单条日志数据非常大同步失败的踩坑带来的思考

    本次遇到的问题描述,日志采集同步时,当单条日志(日志文件中一行日志)超过2M大小,数据无法采集同步到kafka,分析后,共踩到如下几个坑.1.flume采集时,通过shell+EXEC(tail -F ...

  4. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  5. vue常见问题处理 -- 页面刷新时,如何保持原有vuex中的state信息

    一.页面刷新时,如何保持原有vuex中的state信息 页面刷新后,原有的 vuex 中的 state 会发生改变,如果在页面刷新之前,可以将 state 信息保存,页面重新加载时,再将该值赋给 st ...

  6. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...

  7. 解决vuex的数据刷新(F5)后会被初始化的问题

    介绍一个vuex的数据刷新(F5)后会被初始化的问题处理的插件:vuex-localstorage 实现的原理大概就是监听浏览器的刷新,关闭事件,把vuex的值存储到本地localstorage,刷新 ...

  8. 新人踩坑的一天——springboot注入mapper时出现java.lang.NullPointerException: null

    来公司的第二周接到了定时任务的开发需求:每天早上十点发送用户报表邮件 .校招新人菜鸟没做过这玩意有些懵(尴尬)于是决定分步写,从excel导出->邮件发送->定时器实现->mappe ...

  9. MySQL 已有大数据量表进行分区踩坑

    一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a ...

随机推荐

  1. zookeeper的安装(单机版)

    一.获取zookeeper的安装包 zookeeper的官网下载:wget  https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zo ...

  2. SSIS部署后执行失败,无法将保护的XML节点解密

    将包属性中的 protectionLevel 设置成DontSaveSensitive 即可.

  3. 深入剖析Windows专业版安装Docker引擎和Windows家庭版Docker引擎安装的区别

    原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94 公司使用的电脑是Windows专业版,所以配置本机的Docker时会方便许多,后续由于需 ...

  4. DHCP报文交互流程

    1.发现阶段,即DHCP客户机寻找DHCP服务器的阶段(DHCPdiscover) DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCPdiscover发现信息来 ...

  5. c++ 读取、输出txt文件

    下面这段话转自:https://blog.csdn.net/lightlater/article/details/6326338 关于文本文件的文件头 第一 ANSI文件的文件头为空,不需要处理: 第 ...

  6. Codeforces Round #606 (Div. 2) - E. Two Fairs(割点+dfs)

    题意:给你一张无向连通图,对于求有多少对$(x,y)$满足互相到达必须经过$(a,b)$,其中$x\neq a,x\neq b,y\neq a,y\neq b$ 思路:显然$a,b$都必须为割点,所以 ...

  7. rtt之通用bootloader

    目前只支持F1/F4;使用步骤 1 在官网注册产品,根据系列设定参数,接收邮箱,点击生成就可以在自己的邮箱中收到对应的bootloader.bin文件.用jlink就可以将其烧写进单片机. 2 存储被 ...

  8. idea2018.3.6,离线使用maven的方法

    (1)想办法拷贝联网电脑上已经下载好的仓库文件夹mavenRepository到离线环境的电脑上: (2)idea中按照如下图中配置: (3)打开 User settings file中设置的sett ...

  9. python浅谈编程规范和软件开发目录规范的重要性

    前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...

  10. 理解WPF中的视觉树和逻辑树

    轉載地址:http://blog.csdn.net/changtianshuiyue/article/details/26981797 理解WPF中的视觉树和逻辑树  Understanding th ...