当前位置:首页 > React

react实现捕获事件

2026-01-27 09:09:06React

事件捕获与冒泡机制

在React中,事件处理遵循DOM的事件流机制,包含捕获阶段、目标阶段和冒泡阶段。默认情况下React事件在冒泡阶段触发,但可以通过特定语法实现捕获阶段的监听。

使用onCapture语法

在事件名后添加Capture后缀可监听捕获阶段。例如onClick对应捕获阶段的onClickCapture:

function App() {
  const handleCaptureClick = (e) => {
    console.log('捕获阶段触发', e.target);
  };

  const handleBubbleClick = (e) => {
    console.log('冒泡阶段触发', e.target);
  };

  return (
    <div onClickCapture={handleCaptureClick}>
      <button onClick={handleBubbleClick}>点击测试</button>
    </div>
  );
}

原生事件捕获

需要通过addEventListener的第三个参数设置为true来监听捕获阶段:

useEffect(() => {
  const div = document.getElementById('capture-div');
  div.addEventListener('click', handleCapture, true);
  return () => div.removeEventListener('click', handleCapture, true);
}, []);

事件传播控制

调用e.stopPropagation()可阻止事件继续传播:

const handleCapture = (e) => {
  e.stopPropagation();
  console.log('捕获阶段阻止传播');
};

合成事件系统

React的合成事件(SyntheticEvent)是跨浏览器包装器,其捕获阶段行为与原生DOM一致但具有更好的兼容性。所有合成事件都自动池化以提高性能,异步访问事件属性需调用e.persist()

注意事项

  • 捕获阶段监听器应执行轻量级操作
  • 避免过度使用stopPropagation以免破坏预期的事件流
  • 服务端渲染场景下需谨慎处理事件绑定
  • React 17+版本事件委托已改为挂载到rootNode而非document

react实现捕获事件

标签: 事件react
分享给朋友:

相关文章

如何学习react

如何学习react

学习 React 的步骤 理解基础概念 React 是一个用于构建用户界面的 JavaScript 库。学习 React 之前,建议掌握 JavaScript 的基础知识,包括 ES6+ 语法(如箭头…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

vue事件实现

vue事件实现

Vue 事件实现方法 模板中直接绑定事件 在 Vue 模板中通过 v-on 或 @ 语法直接绑定事件。例如点击事件: <button @click="handleClick">点击触发事…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…