You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何监听父div点击事件且点击子div时不触发?

React 父元素点击事件仅自身触发实现方案

这里提供两种常用的可直接落地的实现方式:

方案1:父元素点击事件中判断触发源

核心逻辑是校验点击事件的触发源是否为父元素本身,只有匹配时才执行业务逻辑,不需要改动子元素的任何配置:

import { useRef } from 'react';

function DemoComponent() {
  // 绑定父元素的ref
  const parentRef = useRef(null);

  const parentClickHandler = (e) => {
    // 仅当点击的元素就是父元素本身时才执行逻辑
    if (e.target === parentRef.current) {
      // 此处写点击黑色区域要执行的业务逻辑
      console.log('点击了父级黑色区域');
    }
  }

  return (
    <div 
      ref={parentRef}
      onClick={parentClickHandler}
      style={{ width: '600px', height: '600px', background: '#000', padding: '50px' }}
    >
      {/* 白色子区域,无需额外配置 */}
      <div style={{ width: '400px', height: '400px', background: '#fff' }}>
        此区域点击不会触发父级逻辑
      </div>
    </div>
  )
}

方案2:阻止子元素的点击事件冒泡

核心逻辑是子元素触发点击事件时直接停止事件向上传播,父元素就不会接收到子元素的点击事件,适合子元素本身有独立点击逻辑的场景:

function DemoComponent() {
  const parentClickHandler = () => {
    // 此处写点击黑色区域要执行的业务逻辑
    console.log('点击了父级黑色区域');
  }

  const childClickHandler = (e) => {
    // 阻止事件冒泡到父元素
    e.stopPropagation();
    // 此处可写子元素自身的点击逻辑,没有可以省略
  }

  return (
    <div 
      onClick={parentClickHandler}
      style={{ width: '600px', height: '600px', background: '#000', padding: '50px' }}
    >
      {/* 白色子区域,绑定阻止冒泡的逻辑 */}
      <div 
        onClick={childClickHandler}
        style={{ width: '400px', height: '400px', background: '#fff' }}
      >
        此区域点击不会触发父级逻辑
      </div>
    </div>
  )
}

两种方案按需选择即可,如果子元素数量多且没有独立点击需求,更推荐用方案1,不需要给所有子元素额外绑定事件。

内容的提问来源于stack exchange,提问作者Shared User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:15:05