全栈的自我修养 ———— vuex处理数据消失(由于pc端和移动端的差异,beforeunload带来的巨坑!!!)

文章讲述了作者在使用Vue.js和vuex时,遇到在移动端数据丢失的问题,原因是beforeunload事件在移动端不被支持。通过替换为pagehide事件并利用localStorage存储和恢复state,解决了这个问题。
摘要由CSDN通过智能技术生成

一天小编在写一个有关处理vueX数据刷新时丢失的一个工具类,具体如下

// tool.js
import store from "@/store";
export async function restoreStore() {
  const savedData = JSON.parse(sessionStorage.getItem("myData"));
  window.addEventListener("beforeunload", () => {
    sessionStorage.setItem("myData", JSON.stringify(store.state));
  });
  sessionStorage.removeItem('myData')
  if (savedData) {
    store.replaceState(savedData);
  }
}
new Vue({
  router,
  store,
  render: (h) => h(App),
  created() {
    restoreStore()
  },
}).$mount("#app");
思路就是:
   1、监听beforeunload发生时将当时vueX的信息转大json并保存在本地
   2、当页面加载时触发restoreStore方法从而取回vueX里的信息

写完后没感觉哪里有问题,电脑调试也没问题,但是后来用手机查看网页时候我人傻了,vueX保存的工具类竟然没有发生?!

当时我小脑就萎缩了,后来经过小编的不断调试终于发现了问题所在!!

beforeunload是不被移动端支持的,需要替换成pagehide

解释:
pageshow事件:这个事件在用户浏览网页时触发,pageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发,pageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。

后改如下,问题终于得到解决!

import store from "@/store";
export async function restoreStore() {
  const savedData = JSON.parse(localStorage.getItem("myData"));
  window.addEventListener("pagehide", () => {
    localStorage.setItem("myData", JSON.stringify(store.state));
  });
  localStorage.removeItem('myData')
  if (savedData) {
    store.replaceState(savedData);
  }
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值