为什么event事件无法被序列化到本地存储

此问题出现的场景:

今天为要做一个记住用户上一次选择的task,按正常思路就是localStorage 存储这一次的所有入参,然后下一次init时候调用一下。但是发现有一个入参是$event 序列化之后拿出来少了很多属性。

原因:

事件(Event)对象通常包含特定于浏览器的属性,例如目标元素和鼠标位置。这些属性不能被序列化为 JSON 格式或其他格式,因此事件对象本身也无法被序列化。如果您需要在客户端和服务器之间传递事件数据,您可以将事件属性提取到一个普通的 JavaScript 对象中,然后将该对象序列化。

简单理解就是:event包含了对当前dom的引用,dom无法被序列化

解决方案:

好的,举个例子来说,假设您有一个鼠标单击事件的处理程序,您需要将事件数据发送到服务器以进行处理。您可以创建一个普通的 JavaScript 对象,将事件属性作为对象属性添加进去,然后将该对象序列化为 JSON 格式或其他格式。例如:

TypeScript 复制代码
element.addEventListener('click', function(event) {
  var eventData = {
    type: event.type,
    target: event.target.tagName,
    x: event.clientX,
    y: event.clientY
  };
  
  // 将 eventData 发送到服务器
  // ...
});

在这个例子中,我们将事件类型、目标元素的标签名以及鼠标位置提取到一个普通的 JavaScript 对象 `eventData` 中,并将其发送到服务器。这样就避免了直接将整个事件对象序列化的问题。

我自己的解决方案:

给调用方法的dom元素加上id,localStorage只存id,等下一次组件初始化时候,querySelecter此dom,设置点击事件。

相关推荐
之歆25 分钟前
Day03_HTML 列表、表格、表单完整指南(下)
android·javascript·html
李白的天不白1 小时前
读到数据为undefind是的几种情况
开发语言·javascript·ecmascript
MXN_小南学前端2 小时前
Vue3 + Spring Boot 工单系统实战:用户反馈和客服处理的完整闭环(提供gitHub仓库地址)
前端·javascript·spring boot·后端·开源·github
im_AMBER3 小时前
Leetcode 160 最小覆盖子串 | 串联所有单词的子串
开发语言·javascript·数据结构·算法·leetcode
得想办法娶到那个女人3 小时前
项目中 TypeScript 类型推导 极简实战总结
前端·javascript·typescript
Beginner x_u3 小时前
前端八股整理(Vue 02)|组件通信、生命周期、v-if 与 v-show
前端·javascript·vue.js
zs宝来了4 小时前
React 18 并发模式:Fiber 架构与时间切片
前端·javascript·框架
天若有情6734 小时前
反向封神!C++ 全局单例不避反用,实现无锁多线程函数独占访问
java·javascript·c++
_thought5 小时前
踩坑记录:Vue Devtools(Vue2版)在火狐浏览器上,未在控制台显示
前端·javascript·vue.js
军军君015 小时前
数字孪生监控大屏实战模板:交通云实时数据监控平台
前端·javascript·css·vue.js·typescript·前端框架·echarts