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

React中map遍历传索引到点击处理函数时值为undefined的原因

问题根因

你的onClick事件回调里重复声明了形参i,把外层map遍历作用域里的索引i覆盖了。
React的点击事件回调只会传入1个参数:就是事件对象e,根本不会传第二个参数。你写的(e:React.MouseEvent<HTMLDivElement>, i: number) => deleteHandler(e, i)里,第二个位置的i是回调函数自己的形参,事件触发时不会给这个形参传任何值,所以它的值就是undefined,你把这个值传给deleteHandler,自然拿到的就是undefined。

错误点拆解

你当前的事件绑定代码:

onClick={(e:React.MouseEvent<HTMLDivElement>, i: number) => deleteHandler(e, i)}

这里的i属于事件回调的内部形参,和外层map遍历拿到的索引重名了。根据JavaScript的作用域规则,函数内部的同名变量优先级更高,外层的索引i被直接屏蔽,你实际传入的是永远为undefined的回调形参。

修复代码

删掉onClick回调里多余的i形参声明,直接引用外层map作用域的索引即可:

{offers.map((o, i) => (
  <div key={i} className={classes['OffersList__item']}>
    <UIButton 
      type={'primary'} 
      onClick={(e: React.MouseEvent<HTMLDivElement>) => deleteHandler(e, i)}
    >
      <FaTrash/>
    </UIButton>
  </div>
))}

补充提示:如果你的offers列表会动态增删、调整顺序,不建议用遍历索引作为key值,最好用offer数据里的唯一业务id(比如offerId)作为key,避免出现列表渲染状态错乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:33:40