Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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_Components_Refs - Fatal编程技术网

Javascript reactjs通过引用在组件之间进行通信

Javascript reactjs通过引用在组件之间进行通信,javascript,reactjs,components,refs,Javascript,Reactjs,Components,Refs,我有3个组件。一个父组件和两个子组件(A、B)。第一个子组件A有一个触发父组件功能的按钮。父组件有一个开关,用于显示或不显示子组件B。如果子部件B应可见,则其将被安装。 从父函数调用的子函数A现在执行组件B中的函数 我试图通过在子组件B上提供ref属性来实现它。但由于init上没有安装ref属性,因此。refs为空。 如何在不首先安装所有可能的子组件B(或更高版本的C、D、E)的情况下实现这一点 子A中的onClick事件始终触发引用的事件,这一点很重要 这里是一个快速草案: 有人能给我一个提示

我有3个组件。一个父组件和两个子组件(A、B)。第一个子组件A有一个触发父组件功能的按钮。父组件有一个开关,用于显示或不显示子组件B。如果子部件B应可见,则其将被安装。 从父函数调用的子函数A现在执行组件B中的函数

我试图通过在子组件B上提供ref属性来实现它。但由于init
上没有安装ref属性,因此。refs
为空。 如何在不首先安装所有可能的子组件B(或更高版本的C、D、E)的情况下实现这一点

子A中的onClick事件始终触发引用的事件,这一点很重要

这里是一个快速草案:

有人能给我一个提示来解决我的逻辑问题吗?

下面一行:

从父函数调用的子函数A现在执行中的函数 B部分

是奇怪的/并且是react的禁区:父组件不能(不应该)直接调用子组件内的函数。
父母可以(应该)将道具传递给孩子,然后孩子可以启动自己的功能

如果我理解正确,您希望在子B中执行函数,以便在a)单击组件a并安装组件B时执行

您可以通过以下方式实现这一点:

  • 在父级中添加状态参数,例如,
    this.setState(childAClicked:true)
    ,很可能在父级中的回调函数中,由子级a调用
  • 将此参数传递给子级B,例如
  • 在子B中,添加一个
    componentDidMount()
    lifecycle方法,该方法检查
    this.props.clickedA
    ,如果为true,则在子B中执行函数
  • 如果您希望在更新子B之后也执行该函数,请在
    componentdiddupdate()
    lifecycle方法中添加相同的检查

如果您想根据其他参数仅在组件B、C、D中的一个组件内执行该函数,您可以将此参数添加到父级状态,并将其传递给其他B、C和D组件。

我认为组件将在每个子级(B-D)上接收props;忽略隐藏的一个,在显示的一个上做一些事情。你也可以用一些像EventEmmiter或redux之类的东西“作弊”。哦,天哪,你说得太对了。。。我看不见森林。Thx a lot但如果再次单击按钮,会发生什么情况?B组件中clickedA的值已设置为true,因此它不会更改,因此如何捕获单击的按钮?你必须把它转换成false,但是逻辑就没有意义了,对吧?