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

React.js使用.map()渲染JSX时获取元素id返回null的问题及解决

问题产生原因

  • 核心错误是onClick事件的回调参数定义错误:你写的onClick={(i.id)=>this.getButtonId(i.id)}中,括号内的i.id被识别为回调函数的形参名,相当于你把默认传入的点击事件Event对象重命名为了i.id,实际传入getButtonId方法的是Event对象而非你预期的用户id。拼接后查找的id为div_[object Object],页面不存在对应元素,因此返回null。
  • 额外提示:React框架下不推荐直接使用document.getElementById这类原生DOM操作,优先使用React官方提供的ref体系获取DOM元素,更符合React的数据流和生命周期设计。

正确实现方式

方案1:修复回调参数,保留原有逻辑

你的id赋值写法id={'div_'+i.id}本身没有问题,只要this.state.users中每一项的id是唯一值,就能保证所有按钮的id不重复。只需修正onClick的回调写法即可:

// 方法定义无需修改
const getButtonId = (num) => {
   let click_detect = document.getElementById('div_' + num)
   console.log(click_detect)
}

// 渲染部分删除回调的形参声明即可
this.state.users.map(i => {
   return(
    <button id={'div_' + i.id} onClick={() => this.getButtonId(i.id)}>
      Click Me
    </button>
  )
})

方案2:更符合React规范的实现(无需依赖id查找DOM)

如果你的最终目的是获取点击对应的按钮DOM元素,完全不需要通过id查找,直接从事件对象中就能获取目标元素:

// 直接从事件对象取当前点击的按钮DOM
const getButton = (e) => {
  console.log(e.currentTarget)
}

// 渲染逻辑更简洁,也不需要额外声明id
this.state.users.map(i => {
   return(
    <button onClick={this.getButton}>
      Click Me
    </button>
  )
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:36:01