Когда нажата модальная кнопка (внутри модального компонента), нам нужно сообщить об этом родителю, который может переключать видимость навигации, изменяя класс, в котором находится навигация;
релевантный CSS:
.showBar{display:block}
.hideBar{display:none;}
релевантный родительский JS:
class App extends Component {
constructor() {
super();
this.state = {
name: "React",
navVisible: true
};
}
toggleNavVisibility = () => {
this.state.navVisible
? this.setState({ navVisible: false })
: this.setState({ navVisible: true });
};
render() {
return (
<div className="mainContent">
<Hello name={this.state.name} />
<p>Start editing to see some magic happen :)</p>
<div className={this.state.navVisible ? "showBar" : "hideBar"}>
<TopBar />
</div>
<section>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus
<br />
<ModalExample
buttonLabel={"launch Modal"}
className={"simple"}
modalTitle="My slide show"
onModalClick={this.toggleNavVisibility.bind(this)}
/>
</section>
</div>
);
}
}
релевантный модальный компонент :
const ModalExample = props => {
const { buttonLabel, className, modalTitle, onModalClick } = props;
const [modal, setModal] = useState(false);
const toggle = () => {
setModal(!modal);
onModalClick();
};
return (
<div>
<Button color="danger" onClick={toggle}>
{buttonLabel}
</Button>
<Modal isOpen={modal} toggle={toggle} className={className}>
<ModalHeader toggle={toggle}>{modalTitle}</ModalHeader>
<ModalBody>This is where you can have your slideshow...</ModalBody>
<ModalFooter>
<Button color="primary" onClick={toggle}>
Do Something
</Button>{" "}
<Button color="secondary" onClick={toggle}>
Cancel
</Button>
</ModalFooter>
</Modal>
</div>
);
};
работает стек * здесь