You need to enable JavaScript to run this app. React开发井字棋时子组件无法调用父组件方法问题排查
优惠活动
大模型
产品
解决方案
定价
更多

React开发井字棋时子组件无法调用父组件方法问题排查

React 井字棋组件传参报错排查

问题根因定位

  • 错误1:Game组件传递props取值错误
    在Game组件的render方法中,给Choosechar绑定charSelect属性时,误写为charSelect={this.props.charSelect}。但charSelect是Game组件内部自定义的实例方法,并非从Game的父级传入的props,该值实际为undefined,Choosechar内部调用时就会触发「目标函数不存在」的报错。
    修正方式:直接绑定Game自身的实例方法,即charSelect={this.charSelect}。
  • 错误2:Choosechar事件回调传参不符合父组件预期
    Choosechar组件的onRadioSubmmit方法中,向父组件传递的是空的、未存储任何值的组件state。但Game内部的charSelect方法,是依赖传入参数的currentTarget.innerHTML属性,来读取用户选择的X/O字符值。即便修正了第一个传参错误,当前传递的空对象不存在currentTarget属性,依然会触发空引用报错。
    修正方式:按钮绑定点击事件时,将原生事件对象一并传入,再把收到的事件对象直接转发给父组件,不要传递空state。

关键修正代码片段

// Game组件render中Choosechar的绑定修正
<Choosechar
  menuVisible={this.state.menuVisible}
  charSelect={this.charSelect}
/>

// Choosechar组件按钮事件绑定修正
<button 
  id="x-char" 
  className="xo-button x" 
  onClick={(e) => this.onRadioSubmmit(e)}
>
  X
</button>                    
<button 
  id="o-char" 
  className="xo-button o" 
  onClick={(e) => this.onRadioSubmmit(e)}
>
  O
</button>

// Choosechar组件提交方法修正
onRadioSubmmit(e) {
  this.props.charSelect(e)
}

补充:Choosechar组件中初始化的空state无实际业务作用,可直接移除减少无效代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 20:27:04