html - 在 React 中,onKeyUp 和 onKeyUpCapture(以及 onKeyDown/Capture)有什么区别?
问题描述
我为此搜索了文档和问题,但很惊讶找不到。
在 React index.d.ts 文件中,它显示:
// Keyboard Events
onKeyDown?: KeyboardEventHandler<T>;
onKeyDownCapture?: KeyboardEventHandler<T>;
onKeyPress?: KeyboardEventHandler<T>;
onKeyPressCapture?: KeyboardEventHandler<T>;
onKeyUp?: KeyboardEventHandler<T>;
onKeyUpCapture?: KeyboardEventHandler<T>;
我想使用 onKeyUp 但后来我注意到了这两个版本。这和 onKeyUpCapture 有什么区别,一个比另一个有什么好处?我什么时候使用每个?
解决方案
react 中的事件处理程序传递 的实例SyntheticEvent
,这是一个围绕浏览器本机事件的跨浏览器包装器。该术语capture
与 React 无关。实际上它是来自 DOM HTML Event 的一个概念。
这是事件传播DOM 事件的 3 个一般阶段:
捕获阶段:事件对象通过目标的祖先从窗口传播到目标的父级。(事件归结为元素)。您可能几乎不想在实际代码中使用它。
目标阶段:事件对象到达事件对象的事件目标。此阶段也称为目标阶段。如果事件类型表明事件没有冒泡,则事件对象将在此阶段完成后停止。
冒泡阶段:事件对象以相反的顺序通过目标的祖先传播,从目标的父级开始,到窗口结束。此阶段也称为冒泡阶段。
事件对象被分派到事件目标。但在开始分派之前,必须首先确定事件对象的传播路径。
传播路径是事件通过的当前事件目标的有序列表。这个传播路径反映了文档的层次树结构。列表中的最后一项是事件目标,列表中前面的项称为目标的祖先,紧接在前面的项称为目标的父项。
正如您在这张图片中看到的,它显示了从窗口开始的捕获阶段,通过祖先链向下到元素目标。然后当它到达目标元素时,它在那里触发 -目标阶段最后它冒泡到目标的祖先 -冒泡阶段(如果有任何祖先将停止冒泡stopPropagation
所以 React 通过附加它来给你捕获onKeyUp
阶段onKeyUpCapture
推荐阅读
- java - 运行 selenium testng 可执行 jar 失败
- java - Room Android 实体和 POJO 必须有一个可用的公共构造函数
- php - 对象内部对象的访问信息
- node.js - 如何从json文件nodejs构造api
- java - 访客详细问题 java 中的 IO 文件处理
- python - 我如何在 Web 应用程序中访问远程机器浏览器 - Selenium Python
- vb.net - 内存映射文件随机消失
- swift - VStack 按钮中的图像和按钮标题
- javascript - 根据访问者的语言进行重定向
- java - 为什么 java.util.Stack 未标记为已弃用?