我正在我的 React+Redux+ReactRouter4 应用程序中使用react-modal。
我有一个 MainLayout 容器和一个 Home 容器。
模态只会在主容器被渲染时使用,所以我在主容器中有 ReactModal 的逻辑。我可以像这样轻松地从 Home Container 打开模式:
<button onClick={this.openModal}>Open Modal</button>
问题是 MainLayout 容器有一个导航,也需要打开模态的能力,但是很明显,this.openModal 那里不存在……如何让 MainLayout 容器在 Home 容器中打开模态?
class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
modalIsOpen: false
};
this.openModal = this.openModal.bind(this);
this.closeModal = this.closeModal.bind(this);
}
openModal() {
this.setState({modalIsOpen: true});
}
closeModal() {
this.setState({modalIsOpen: false});
}
render() {
return (
<div>
....
<button onClick={this.openModal}>Open Modal</button>
<Modal
isOpen={this.state.modalIsOpen}
onAfterOpen={this.afterOpenModal}
onRequestClose={this.closeModal}
style={modalCustomStyles}
contentLabel="Example Modal"
>
<h2 ref={subtitle => this.subtitle = subtitle}>Hi</h2>
<button onClick={this.closeModal}>close</button>
<div>I am a modal</div>
</Modal>
</div>
)
};
};
应用程序.jsx
const WithMainLayout = ({component: Component, ...more}) => {
return <Route {...more} render={props => {
return (
<MainLayout {...props}>
<Component {...props} />
</MainLayout>
);
}}/>;
};
....
<WithMainLayout exact path="/" component={Home} />