当前位置:首页 > React

react实现捕获事件

2026-01-27 09:09:06React

事件捕获与冒泡机制

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

使用onCapture语法

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

react实现捕获事件

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来监听捕获阶段:

react实现捕获事件

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中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…

java如何react

java如何react

在Java中使用React 要在Java项目中集成React,通常需要将React前端与Java后端结合使用。以下是几种常见的方法: 使用Spring Boot作为后端 Spring Boot是一个…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…

如何调试react源码

如何调试react源码

调试React源码的方法 克隆React源码仓库到本地: git clone https://github.com/facebook/react.git cd react 安装依赖并构建开发版本:…

react如何上传文件

react如何上传文件

使用React上传文件的方法 使用HTML的input元素和FormData 创建一个文件输入字段,通过onChange事件获取文件对象,使用FormData将文件数据发送到服务器。 import…