javascript - React onClick 是否更像一个 JavaScript addEventListener 而不是一个标准的 JavaScript onclick 属性?

标签 javascript reactjs dom-events

在 React 中,将 onClick 视为设置 eventListener 而不是标准的 JavaScript onclick 属性是否更好?

例如,考虑这两个代码片段,第一个在标准 JavaScript 中,第二个在 React 中:

<button onclick="activateLasers()">
  Activate Lasers
</button>

<button onClick={activateLasers}>
  Activate Lasers
</button>

在上面的示例中,onclick 与对 activateLasers 函数的快速调用相关联。然而,在 React 示例中,onClick 仅与 activateLasers 函数相关联(语法并未明确调用该函数,尽管它确实在幕后调用了它)。从这个意义上说,尽管它的名字是 React 的 onClick,但它更像是这样传统的 JavaScript 代码:

.addEventListener("click", activateLasers)

或者这是错误的思考方式?

最佳答案

差不多,它看起来像这样:

// mapEventToComponent implemented by React
document.getElementById("root").addEventListener("click", mapEventToComponent,...);

在 React 中,事件处理程序(如 onClick 处理程序)是 SyntheticEvent instances .

它有助于通过使用事件委托(delegate)实现高性能。 React 将单个事件监听器附加到文档的 root(而不是节点本身),当事件调用时,React 将其映射到组件。

自己检查一下!

const Component = () => {
  return <button onClick={() => console.log("hello")}>Click</button>;
};

Edit Synthetic Event

  1. 打开开发工具
  2. 触发事件以查看它是否正常工作。
  3. 转到事件监听器标签。
  4. 检查所有事件附加到哪个元素。
  5. #root 元素中删除 click 监听器。

enter image description here

关于javascript - React onClick 是否更像一个 JavaScript addEventListener 而不是一个标准的 JavaScript onclick 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66140454/

相关文章:

javascript - ReactJS 游戏 - 在组件之间切换 - 无法执行

javascript - 只触发一次事件?

javascript - 如何在传单中使用事件overlayadd 图层?

javascript - 如何在 reactjs ES6 的 JSONArray 上使用 .map() 函数

javascript - 如何强制循环等待用户按下提交按钮?

javascript - 从 JSON API React Native 打印值

javascript - 如何让球击中桨时移动得更快?

php - 如何使用 uploadify 为每个上传的文件获取唯一名称

javascript - Strophe 附加和 Ejabberd 的 session 恢复问题

node.js - 无法将数据从 React Js 发布到 Node js