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

React点击计数器每次点击递增2而非1的问题求助

React点击计数器点击后递增2的问题解决

问题根源

你同时做了两件导致计数翻倍的操作:

  • 在<h2>元素上通过React的onClick绑定了clickHandler
  • 又通过useEffect给父级<div>添加了原生click事件绑定,且依赖项包含clickCount(核心问题是双重绑定)

当点击<h2>时,DOM事件冒泡机制会让事件先触发<h2>的点击事件,接着冒泡到父级<div>触发原生绑定的事件,同一个clickHandler被执行两次,所以计数器每次加2。

解决方案(推荐第一种)

方案1:移除多余的原生事件绑定

React的合成事件系统已经足够处理点击逻辑,完全不需要额外通过原生事件绑定。删除整个useEffect代码块和无用的useRef即可,同时优化setClickCount为函数式更新避免闭包问题:

function MyComponent() {
  const [clickCount, setClickCount] = useState(0);

  const clickHandler = () => {
    // 函数式更新确保拿到最新的count值
    setClickCount(prevCount => prevCount + 1);
  };

  return (
    <div className="my-component">
      <h2 onClick={clickHandler}>
        My Component ({clickCount} clicks)
      </h2>
    </div>
  );
}
export default MyComponent;

方案2:阻止事件冒泡(不推荐,仅作了解)

如果一定要保留双重绑定,在点击事件中阻止冒泡,避免父级事件触发:

const clickHandler = (e) => {
  e.stopPropagation();
  setClickCount(prevCount => prevCount + 1);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:51:19