React.js 中冒泡和捕获的示例

Posted

技术标签:

【中文标题】React.js 中冒泡和捕获的示例【英文标题】:Example for Bubbling and Capturing in React.js 【发布时间】:2016-04-04 00:55:56 【问题描述】:

我正在寻找在 React.js 中处理冒泡和捕获的示例。我找到了 one with javascript,但我找不到 React.js 的等价物。

如何在 React.js 中创建一个冒泡和捕获示例?

【问题讨论】:

事件冒泡是 DOM 特定的事件概念。 React 的全部意义在于摆脱 DOM。你可以在 React 中通过创建组件函数并通过 props 将它们传递给子函数来做到这一点 看React events和React DOM event listeners 【参考方案1】:

React 以与 DOM 规范中描述的相同方式支持冒泡和捕获,除了你如何附加处理程序。

Bubbling 与普通 DOM API 一样简单;只需将处理程序附加到元素的最终父级,只要在此过程中没有通过stopPropagation 停止,在该元素上触发的任何事件都会冒泡到父级:

<div onClick=this.handleClick>
  <button>Click me, and my parent's `onClick` will fire!</button>
</div>

捕获同样简单,尽管它是mentioned only briefly in the docs。只需将Capture 添加到事件处理程序属性名称。比如onClick变成onClickCapture

<div onClickCapture=this.handleClickViaCapturing>
  <button onClick=this.handleClick>
    Click me, and my parent's `onClickCapture` will fire *first*!
  </button>
</div>

在这种情况下,如果handleClickViaCapturing 在事件上调用stopPropagation,则不会调用按钮的onClick 处理程序。

This JSBin 应该演示捕获、冒泡和stopPropagation 在 React 中的工作原理:https://jsbin.com/hilome/edit?js,output

【讨论】:

要记住的是,所有原版 javascript 事件,例如来自库的事件,都是预先调用的。无论您是在 Capture 阶段还是 Bubble 阶段注册事件。 如果我想要相反的情况怎么办?如果我有父级的onClick 并且即使单击子级也想调用该函数怎么办? @Dane 那是正常的事件冒泡,如上面两个例子中的第一个所述(当你点击子按钮时会触发父 div 的 onClick)。 @MichelleTilley。你能帮我吗?***.com/questions/47690686/… @Pants 怎么样?如果您有一个小评论无法回答的具体问题,请提出单独的 SO 问题。

以上是关于React.js 中冒泡和捕获的示例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CKEditor 和 React JS 捕获 OnChange 事件

未捕获的 ReferenceError:未使用 react-chartjs.min.js 定义要求

事件冒泡和事件捕获

JS 事件冒泡防止复选框选中状态

什么是事件冒泡和捕获?

Render.js 文件(电子应用程序)中的“未捕获的 TypeError:React.createClass 不是函数”