当前位置:首页 > 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 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…

java如何react

java如何react

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

odyssey react 如何

odyssey react 如何

Odyssey React 是耐克推出的一款跑鞋系列,以其轻量化设计和React泡沫缓震技术著称。以下是关于该系列鞋款的主要特点和使用建议: 核心特点 React泡沫中底提供出色的能量回馈和缓震效果…