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

React Styled-Components中onClick失效,如何不修改组件直接调用?

解决方案

你的问题核心在于DeleteButton组件仅接收并传递className属性,其他props(包括onClick)会被直接忽略。当用styled(DeleteButton)创建新组件时,onClick无法传递到底层的<button> DOM元素,因此无法触发。以下是两种无需修改DeleteButton的解决方法:

方法一:事件委托

借助事件冒泡机制,在StyledDeleteButton的父容器上绑定点击事件,通过判断目标元素来执行删除逻辑:

<div onClick={(e) => {
  // 通过类名标识判断点击目标
  if (e.target.closest('.custom-delete-btn')) {
    DeleteItem(item._id);
  }
}}>
  <StyledDeleteButton className="custom-delete-btn" />
</div>

方法二:复用基础样式创建新组件

既然DeleteButton只是对GenericStyledDeleteButton的简单封装,你可以直接基于原生button创建新的styled组件,复用通用按钮样式:

const StyledDeleteButton = styled.button`
  // 复用通用按钮的样式
  ${GenericStyledDeleteButton}
  // 添加自定义样式
  margin-left: auto;
  margin-right: 25px; 
`;

// 直接使用,onClick可正常触发
<StyledDeleteButton onClick={() => DeleteItem(item._id)} />

这种方法跳过了DeleteButton的封装层,直接操作底层DOM元素的样式和事件,避免了props传递的遗漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:25:24