Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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
Reactjs 如何避免在调用组件和可重用组件中管理状态?_Reactjs_React State Management - Fatal编程技术网

Reactjs 如何避免在调用组件和可重用组件中管理状态?

Reactjs 如何避免在调用组件和可重用组件中管理状态?,reactjs,react-state-management,Reactjs,React State Management,在React中,我构建了一个可重用的组件,为了简洁起见,它管理自己的打开/关闭状态。让我们称之为面板 我有另一个组件,它利用了面板组件,我们称之为Bob。 调用API后,我想触发面板打开面板 我真的必须管理调用组件中的状态,以确定面板是否应该打开并作为道具传递它吗?当然,有一种方法可以通过从面板中公开一个方法来管理面板中的状态 以下是我一直在做的事情: Bob管理状态:shouldOpen:布尔值 当Bob需要打开面板时:this.setState{shouldOpen:true} <Pa

在React中,我构建了一个可重用的组件,为了简洁起见,它管理自己的打开/关闭状态。让我们称之为面板

我有另一个组件,它利用了面板组件,我们称之为Bob。 调用API后,我想触发面板打开面板

我真的必须管理调用组件中的状态,以确定面板是否应该打开并作为道具传递它吗?当然,有一种方法可以通过从面板中公开一个方法来管理面板中的状态

以下是我一直在做的事情: Bob管理状态:shouldOpen:布尔值

当Bob需要打开面板时:this.setState{shouldOpen:true}

<Panel
  shouldOpen={this.state.shouldOpen}
/>

我在寻找正确的方法。如果这意味着我需要不同的代码结构,请提供指导。对我来说,面板应该管理自己的打开/关闭状态是有意义的。

在React中,您经常会发现一种模式,即可重用组件通过道具提供接口,例如在您的情况下,isOpen In面板。但是,您的面板组件不必在其状态下存储任何内容,而是应该使用this.props,如果它是一个由其父组件“控制”的组件,就像您的情况一样-这是完全好的代码,所以不要担心它

要回答问题的另一部分:是的,可以使用React.createRef调用面板组件上的方法,请参阅

public openPanel = () => {
  this.setState({isOpen: true});
}
public closePanel = () => {
  this.setState({isOpen: false});
}