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

React中如何获取按钮值并传递到其他组件?点击取值异常

问题解决方案

问题出在事件冒泡机制上——当点击按钮内的图标时,e.target指向的是<FaUserSecret>图标元素,而非外层绑定点击事件的<button>,自然取不到按钮上的value属性。以下是三种可行的解决方案:

方案1:使用e.currentTarget替代e.target

currentTarget始终指向绑定事件处理函数的元素(也就是这里的按钮),不受事件冒泡影响,能稳定拿到按钮的value:

<button value={'admin'} onClick={(e) => handleClick(e.currentTarget.value)}>
  <FaUserSecret className="text-lg" /> {/* 注意:这里是className,不是classname */}
</button>

方案2:直接传递目标值到处理函数

不用依赖事件对象,直接把需要的值传给handleClick,逻辑更直观,也避免了事件目标的问题:

<button value={'admin'} onClick={() => handleClick('admin')}>
  <FaUserSecret className="text-lg" />
</button>

如果是循环生成的按钮数组,直接用循环项的value即可:

{/* 假设buttons是你的按钮配置数组 */}
{buttons.map(btn => (
  <button key={btn.value} value={btn.value} onClick={() => handleClick(btn.value)}>
    {btn.icon} {/* 比如这里的btn.icon就是FaUserSecret组件 */}
  </button>
))}

方案3:让图标不接收点击事件

给图标添加pointer-events: none样式,点击图标时事件会直接穿透到外层按钮,此时e.target就会是按钮:

<button value={'admin'} onClick={(e) => handleClick(e.target.value)}>
  <FaUserSecret className="text-lg" style={{ pointerEvents: 'none' }} />
</button>

也可以通过CSS类全局设置:

.icon-btn .text-lg {
  pointer-events: none;
}

然后给按钮加上对应类名:

<button className="icon-btn" value={'admin'} onClick={(e) => handleClick(e.target.value)}>
  <FaUserSecret className="text-lg" />
</button>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:15:42