Reactjs Asp.net core 2.0上React中的子级到父级通信

Reactjs Asp.net core 2.0上React中的子级到父级通信,reactjs,asp.net-core-2.0,Reactjs,Asp.net Core 2.0,我在asp.net core 2.0中有一个React应用程序(不是ReactJs),我遇到了问题。我有一个子组件需要与父组件通信。特别是当点击子组件中的按钮时,我需要将其转发给父组件。这是我得到的,但我不能让它工作 子组件: 导出类按钮扩展React.Component{ 按钮点击(idx){ //我想在这里通知父组件 //已单击该按钮(idx) 返回idx } 公共渲染(){ 返回 按钮1 按钮2 按钮3 按钮4 ; } } 父组件: 导出类Home扩展React.Component{ .

我在asp.net core 2.0中有一个React应用程序(不是ReactJs),我遇到了问题。我有一个子组件需要与父组件通信。特别是当点击子组件中的按钮时,我需要将其转发给父组件。这是我得到的,但我不能让它工作

子组件:

导出类按钮扩展React.Component{
按钮点击(idx){
//我想在这里通知父组件
//已单击该按钮(idx)
返回idx
}
公共渲染(){
返回
按钮1
按钮2
按钮3
按钮4
;
}
}
父组件:

导出类Home扩展React.Component{
...
处理器(idx){
//这里需要idx吗
}
返回
{content}
按钮
;
}

尝试在子组件中执行此操作:

导出默认类按钮扩展React.Component{
按钮单击=(idx)=>{
此.props.buttonClick(idx);
}
公共渲染(){
返回
按钮1
按钮2
按钮3
按钮4
;
}
}

这里有两个主要选项,
简单的解决方案,但被认为是一种不良做法
稍微复杂一点,但考虑了良好实践

  • 简单的解决方案:
    使用currying将
    id
    参数传递给处理程序:
    这是一种不好的做法,因为它会创建一个新的函数实例 在每次渲染时,在每次渲染时传递新道具可能会导致性能问题,这可能会中断渲染

    
    类按钮扩展了React.Component{
    建造师(道具){
    超级(道具);
    this.buttonClick=this.buttonClick.bind(this);
    }
    按钮点击(idx){
    常数=this;
    返回函数(e){
    那。道具。按钮点击(idx);
    }
    }
    render(){
    返回
    按钮1
    按钮2
    按钮3
    按钮4
    ;
    }
    }
    类应用程序扩展了React.Component{
    建造师(道具){
    超级(道具);
    this.state={};
    this.handler=this.handler.bind(this);
    }
    处理器(idx){
    console.log(idx);
    }
    render(){
    返回(
    按钮
    );
    }
    }
    render(,document.getElementById(“根”));
    
    
    
    这不起作用,因为您没有传递函数引用,而是传递函数的返回值(顺便说一句,这是未定义的,因为此函数不返回任何内容)哦,对了。嗯。这就是我没有先测试的原因。看来有人发布了一个更好的答案,所以我不想费心去修改。Thx一堆…我正为此把头撞在墙上