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

React点击事件首次点击无响应?Pro React 16示例代码问题咨询

问题原因

代码的问题出在SimpleButton组件handleClick方法的执行时序上:
React中setState是异步批量执行的,你在调用setState后立刻执行了props.callback(),而回调内部直接调用ReactDOM.render重渲染整个应用根节点,打断了当前的状态更新流程,第一次点击设置的counter和hasButtonBeenClicked状态还没来得及生效,应用就被触发了重渲染,因此看起来第一次点击没有任何反应。第二次点击时之前的更新流程已经走完,才能正常触发状态更新和行排序逻辑。

修复方法

把props.callback()放到setState的第二个回调参数中,等组件自身状态更新完成后再执行回调即可,修改后的handleClick代码如下:

handleClick = () => {
  this.setState({
    counter: this.state.counter + 1,
    hasButtonBeenClicked: true
  }, () => {
    // 等待状态更新完成后再执行父级回调
    this.props.callback();
  });
}

额外优化建议

这个示例是书籍为了演示特定知识点,才使用了全局变量存储数据+手动调用ReactDOM.render强制重渲染的写法,实际项目开发中不推荐这种做法。更合理的实现是将names数组放到App组件的内部状态中,通过setState更新数组,React会自动处理重渲染逻辑,不会出现这类时序冲突问题。

内容的提问来源于stack exchange,提问作者N. Kaufman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:36:02