Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ReactJS中调用另一个组件方法:一种方法有效,其他方法无效;为什么?_Javascript_Reactjs - Fatal编程技术网

Javascript 在ReactJS中调用另一个组件方法:一种方法有效,其他方法无效;为什么?

Javascript 在ReactJS中调用另一个组件方法:一种方法有效,其他方法无效;为什么?,javascript,reactjs,Javascript,Reactjs,以应用程序为例: 功能应用程序{ 回来 ; } 导出默认应用程序; 组件二为: 类ComponentTwo扩展了React.Component{ 建造师{ 超级的 window.handleClick=this.handleClick; } handleClick=函数{alert'hello';} 呈现{return null;} } 为什么这样做有效: 类ComponentOne扩展了React.Component{ handleClick{window.handleClick;} 呈现{r

以应用程序为例:

功能应用程序{ 回来 ; } 导出默认应用程序; 组件二为:

类ComponentTwo扩展了React.Component{ 建造师{ 超级的 window.handleClick=this.handleClick; } handleClick=函数{alert'hello';} 呈现{return null;} } 为什么这样做有效:

类ComponentOne扩展了React.Component{ handleClick{window.handleClick;} 呈现{return;} } 但不是这个:

//没有错误,但不起作用 类ComponentOne扩展了React.Component{ 呈现{return;} } 或者这个:

//单击输入按钮时出错,表示ComponentTwo.handleClick不是函数 类ComponentOne扩展了React.Component{ handleClick{ComponentTwo.handleClick;} 呈现{return;} } 同样在第一种情况下,如果我理解正确,那么使用全局window.handleClick似乎不是一个好的做法。有更好的办法吗?或者,处理单击一个组件更改另一个组件状态的最佳实践方法是什么

我不确定我遗漏了什么——我没有做过任何严肃的JS编程;到目前为止,仅使用vanilla JS和jquery操作DOM组件。所以,我也很高兴知道这一点。多谢各位

附言:我得到了第一种方法

处理单击一个组件更改另一个组件状态的最佳实践方法是什么

您可以在父组件中定义函数,并将其作为道具传递给需要处理程序的任何子组件

或者,如果绝对必须在子组件中定义函数,则可以将其传递给父组件,父组件可以传递该函数,然后将其作为道具传递给子组件


但在我看来,你可以用更好的方式。如果希望子组件中的处理程序更改主组件的状态,最佳做法是。

第二个不起作用的示例不起作用,因为handleClick不是静态方法。无论如何,你都不应该这样做。将单击事件作为道具传递给家长并返回给孩子。