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

React onClick事件传递映射Key值异常:为何获取到SyntheticBaseEvent而非目标Key

问题分析与解决办法

嘿,我一眼就瞅出问题所在啦!你遇到的这个情况,是因为箭头函数的参数声明把你要传的key给覆盖了~

错误原因

你写的onClick={(key) => handleDeleteIncome(key)}里,这个key参数其实并不是你map循环里拿到的那个键值!React的点击事件回调默认会把点击事件对象作为第一个参数传递进来,你这里用key这个名字接收了事件对象,自然就把原本的key变量覆盖了,所以打印出来的是SyntheticBaseEvent而不是你想要的字符串键。

解决方案

给你两种简单的修复方式:

方式1:直接传递外部的key

去掉箭头函数里的参数声明,直接在回调里引用map循环中的key变量:

Object.entries(userWalletIncomes).map(([key, value]) => { 
  return ( 
    <div id="incomeTable" className="text-left mx-auto flex" key={key}> 
      <p className="w-32 border p-1 capitalize">{key} :</p> 
      <p className="w-32 border p-1 text-green-500">{value}€</p> 
      <button onClick={() => handleDeleteIncome(key)}>
        <i className="fas fa-times text-red-400 border p-1"></i>
      </button> 
    </div> 
  ) 
})

方式2:同时获取事件对象和key(如果需要用到事件的话)

如果你之后需要用到点击事件的相关操作,可以把事件对象作为第一个参数接收,再传入key:

// 先调整handleDeleteIncome的参数顺序,比如:
const handleDeleteIncome = (e, key) => {
  // e是事件对象,key是你要的键值
  console.log(key);
  // 其他逻辑...
}

// 然后修改onClick:
Object.entries(userWalletIncomes).map(([key, value]) => { 
  return ( 
    <div id="incomeTable" className="text-left mx-auto flex" key={key}> 
      <p className="w-32 border p-1 capitalize">{key} :</p> 
      <p className="w-32 border p-1 text-green-500">{value}€</p> 
      <button onClick={(e) => handleDeleteIncome(e, key)}>
        <i className="fas fa-times text-red-400 border p-1"></i>
      </button> 
    </div> 
  ) 
})

这样修改后,点击按钮就能正确传递你想要的key值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:32:52