Reactjs Asp.net core 2.0上React中的子级到父级通信
我在asp.net core 2.0中有一个React应用程序(不是ReactJs),我遇到了问题。我有一个子组件需要与父组件通信。特别是当点击子组件中的按钮时,我需要将其转发给父组件。这是我得到的,但我不能让它工作 子组件: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{ .
导出类按钮扩展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一堆…我正为此把头撞在墙上