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

React(JavaScript)中获取data-id属性失败,求最优解决方法

解决React中点击子元素获取父元素data属性的问题

方法一:用event.currentTarget替代event.target

event.currentTarget始终指向绑定事件处理函数的元素(也就是带data-id的父div),而event.target是实际触发点击的元素(这里是子div)。修改代码如下:

<div onClick={handlePropsClick} title={'aaa'} data-id={2}>
  <div className='value-text'>Hello</div>
</div>

const handlePropsClick = (event) => {
  // 两种方式都可以获取data-id
  alert(event.currentTarget.getAttribute('data-id'));
  // 或者用更简洁的dataset API
  alert(event.currentTarget.dataset.id);
};

注意:你之前的handlePropsClick写成了返回函数的形式,其实没必要,直接接收event参数即可(如果不需要提前传参的话)。

方法二:直接传递数据给事件处理函数(React推荐方案)

React更提倡数据驱动而非DOM操作,你可以直接把需要的data-id值作为参数传给事件处理函数,完全不用依赖DOM属性:

<div onClick={() => handlePropsClick(2)} title={'aaa'}>
  <div className='value-text'>Hello</div>
</div>

const handlePropsClick = (id) => {
  alert(id); // 直接拿到2
};

这种方式更符合React组件化的思想,不依赖DOM结构,后续DOM调整也不会影响功能,是最优解。

方法三:通过DOM查找目标父元素(不推荐)

如果一定要基于DOM结构查找,可以用closest方法找到最近的带data-id的元素,但这种方式依赖DOM层级,结构变动容易失效:

<div onClick={handlePropsClick} title={'aaa'} data-id={2}>
  <div className='value-text'>Hello</div>
</div>

const handlePropsClick = (event) => {
  const targetElement = event.target.closest('[data-id]');
  if (targetElement) {
    alert(targetElement.dataset.id);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:31:11