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

React子组件传值至父组件报错:无法获取callbackRowSum属性求助

解决React中this.callbackRowSum未定义的问题

这个错误的核心原因是**map回调函数里的this上下文不是你的React组件实例**。当你使用普通的function作为map的回调时,它会创建自己的this上下文,导致你无法访问组件的this.callbackRowSum方法。

下面是几种可行的解决方案:

方案1:使用箭头函数作为map的回调

箭头函数不会绑定自己的this,它会继承外部作用域的this(也就是你的组件实例),这样就能正常访问this.callbackRowSum了:

ViewGRNCartTableRow(){
  return this.state.cartProducts.map((object,i) => {
    return <ViewGRNTable obj={object} key={i} callbackSum={this.callbackRowSum} />;
  });
}

方案2:给map的回调函数绑定this

你可以通过bind(this)手动把组件的this绑定到回调函数上:

ViewGRNCartTableRow(){
  return this.state.cartProducts.map(function(object,i){
    return <ViewGRNTable obj={object} key={i} callbackSum={this.callbackRowSum} />;
  }.bind(this));
}

方案3:在构造函数中绑定ViewGRNCartTableRow的this

如果你习惯使用普通函数,也可以在组件的构造函数里提前绑定当前方法的this:

constructor(props) {
  super(props);
  this.state = {
    cartProducts: [],
    GRNtotal: 0
  };
  // 绑定方法的this
  this.ViewGRNCartTableRow = this.ViewGRNCartTableRow.bind(this);
}

ViewGRNCartTableRow(){
  return this.state.cartProducts.map(function(object,i){
    return <ViewGRNTable obj={object} key={i} callbackSum={this.callbackRowSum} />;
  });
}

额外优化:使用函数式setState

另外还要注意,当你的新状态依赖于之前的状态时,最好使用函数式的setState,因为React的setState是异步操作,直接访问this.state可能会拿到过时的值:

callbackRowSum = (rowsum) => {
  this.setState(prevState => ({
    GRNtotal: prevState.GRNtotal + rowsum
  }))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:44:05