reactjs React -尝试从父组件中的函数更改子组件中的状态

bpzcxfmw  于 2023-03-22  发布在  React
关注(0)|答案(1)|浏览(102)
class ParentComponent extends Component {
  state = { isDialogOpen: false }
  handleClose = () => {
    this.setState({ isDialogOpen: false })
  }
   handleOpen = () => {
    this.setState({ isDialogOpen: true })
  }
  render() {
    return (
      <div>
        <Button onClick={() => this.handleOpen}>Open Dialog</Button>
        <ChildComponent isOpen={isDialogOpen} onClose={this.handleClose}>
      </div>
    )
  }
}

class ChildComponent extends Component {
  constructor(props) {
    super(props)
    this.state = {
      setStyle: false
    }
  }

  componentDidUpdate(prevProps, prevState) {
    if(!isOpen && prevProps.isOpen && setStyle !== prevState.setStyle) { 
     // make some API call here to fetch and display data in dialog box 
     // action from react-redux
      someAPIfunction()
    }

  handleSetStyle() {
    this.setState({
      setStyle: true
    })
  }
 
 const {setStyle } = this.state; 
 const showTextStyle = setStyle ? 'some-css' : null 
  render() {
    return <DialogComponentLibrary isOpen={isOpen} onClose={onClose}>
        <p className={showTextStyle}>{someDataFromAPI}</p>
        <Button onClick={this.handleSetStyle}>SET STYLE</Button>
    </Dialog>
  }
}

当前的行为是,当我点击子组件中的“SET STYLE”按钮时,它将状态setStyle设置为true,并使用新样式重新呈现对话框组件。然而,当我关闭对话框组件时,setStyle仍然是“true”。每当我关闭子组件时,我需要将“setStyle”设置为“false”。我正在考虑在父组件中设置“setStyle”状态,在父组件的handleClose函数中,我将setStyle重置为false。然后我尝试在子组件中读取prop setStyle并将其作为状态包含在内。然而,仍然不确定如何在子组件中将setStyle状态更改为true,因为onClose仍然由父组件控制。
感谢您的任何想法,谢谢。

deyfvvtc

deyfvvtc1#

您需要定义一个同时包含onClose和setState方法的处理程序。

handleClose = () => {
this.setState({setStyle: false});
this.props.onClose();
}

并将此处理程序传递给对话框组件的onClose方法。

<Dialog isOpen={isOpen} onClose={this.handleClose}>

相关问题