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

ReactJS技术疑问:点击按钮为何触发两个onClick绑定方法?

问题原因及解决办法

为啥点Add按钮会触发removeItem?

核心问题出在删除按钮的onClick绑定上:你写的onClick={removeItem(item)}是直接执行了函数,而不是把函数引用传给点击事件。

每次组件渲染(包括点击Add按钮调用setItems更新items导致的重渲染),items.map循环里的removeItem(item)都会被立即执行一遍,所以你点Add按钮时,不仅触发了addItem,还会连带执行所有删除按钮对应的removeItem。

怎么改?

方法1:用箭头函数包裹

把删除按钮的onClick改成箭头函数,这样只有点击时才会调用removeItem:

<button id="b" type="button" onClick={() => removeItem(item)}>Delete</button>

方法2:让removeItem返回一个函数

调整removeItem的写法,让它返回一个处理点击的函数:

const removeItem = item => () => {
    console.log('remove', item);
}

之后删除按钮的onClick就可以直接写onClick={removeItem(item)},此时传递的是返回的函数,而非直接执行。

额外提醒

你的map循环里没返回按钮元素,得补上,而且React列表渲染要求给每个元素加key:

{items.map((item, index) => (
    <button key={index} id="b" type="button" onClick={() => removeItem(item)}>Delete</button>
))}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:23:11