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仍然由父组件控制。
感谢您的任何想法,谢谢。
1条答案
按热度按时间deyfvvtc1#
您需要定义一个同时包含onClose和setState方法的处理程序。
并将此处理程序传递给对话框组件的onClose方法。