首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复制react合成事件的实例

复制react合成事件的实例
EN

Stack Overflow用户
提问于 2018-11-08 15:44:34
回答 1查看 1K关注 0票数 15

使用vanilla,可以克隆这样的事件实例:

代码语言:javascript
运行
复制
const cloneEvent = event => new event.constructor(event.type, event);

可用于将事件事件从一个DOM元素转发到另一个DOM元素。例如,

代码语言:javascript
运行
复制
const buttonA = document.querySelector('#a');
const buttonB = document.querySelector('#a');

const clickHandler = (type, forwardTo) => event => {
  console.log(type, 'was clicked');
  if (forwardTo) forwardTo.dispatchEvent(cloneEvent(event));
};

buttonA.addEventListener('click', clickHandler('A', buttonB));
buttonA.addEventListener('click', clickHandler('B'));

当你点击A的时候,你也会看到两个按钮的两个标志。

我想在React的SyntheticEvent上实现同样的目标,但是我正在讨论一些问题,大概是因为SyntheticEvent的实例化方式与本地事件不同。下面是一个生动的演示,演示了这个问题:https://jsfiddle.net/2Lhsfceu/2/ (参见dev控制台日志)

我目前的解决方案是克隆本机事件(SyntheticEvent.nativeEvent),如下所示(更新和工作现场演示:https://jsfiddle.net/2Lhsfceu/1/)

代码语言:javascript
运行
复制
const cloneEvent = event => {
  const nativeEvent = event.nativeEvent || event;
  new nativeEvent.constructor(nativeEvent.type, nativeEvent);
}

,我想知道是否有一种更清洁的方法,或者这是我们所能做的最好的?

我担心的是,仅通过克隆本机事件,代码库将处理两种不同类型的事件:由源事件(来自React)分派的SyntheticEvent和来自转发的本机事件。

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 11:54:56

一旦在DOM上分配本机事件就像手动滚动一样,就应该可以了。

我担心的是,仅通过克隆本机事件,代码库将处理两种不同类型的事件:由源事件(来自React)分派的SyntheticEvent和来自转发的本机事件。

React所做的是侦听根上的所有本机事件(此处的<div id="#root"/>,它们通过冒泡到达那里),然后每次接收到事件时,它都会创建一个等效的SyntheticEvent,然后在React代码中传递。

因此,如果您手动触发本机事件,那么React将像往常一样创建它们的SyntheticEvent等价物,这应该是很好的。

在非常罕见的情况下,在Javascript中手动发送事件将与让真正的用户触发事件有不同的效果。见这个例子

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53211240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档