javascript - 如何从父组件打开或关闭 reactstrap 模式
问题描述
我正在尝试从父组件按钮打开/关闭 reactstrap 模式,但我无法让它工作。
我将状态isModalOpen
作为道具传递给子ModalExample
组件,它的变化如我制作的调试文本字段中所示,但模式似乎没有打开。
任何帮助表示赞赏。这是一个 jsfiddle:https ://jsfiddle.net/67wy5nqp/
const { Button, Modal, ModalHeader, ModalBody, ModalFooter } = Reactstrap;
class ModalExample extends React.Component {
constructor(props) {
super(props);
console.log(this.props);
}
render() {
return (
<div>
<br />
<label>
(child) this.props.isOpen
<input type="text" value={this.props.isOpen} />
</label>
<Modal
isOpen={this.props.isModalOpen}
toggle={this.props.toggleModalView}
className={this.props.className}
>
<ModalHeader toggle={this.props.toggleModalView}>
Modal title
</ModalHeader>
<ModalBody>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={this.props.toggleModalView}>
Do Something
</Button>
<Button color="secondary" onClick={this.props.toggleModalView}>
Cancel
</Button>
</ModalFooter>
</Modal>
</div>
);
}
}
class SampleApp extends React.Component {
constructor(props) {
super(props);
this.state = {
isModalOpen: true
};
this.showModal = this.showModal.bind(this);
this.toggle = this.toggle.bind(this);
}
toggle() {
this.setState({
isModalOpen: !this.state.isModalOpen
});
}
showModal() {
this.setState({
isModalOpen: true
});
}
render() {
return (
<div>
<ModalExample
isOpen={this.state.isModalOpen}
toggle={this.state.isModalOpen}
/>
<br />
<button className="btn btn-primary" onClick={this.toggle}>
Show Modal From Parent Component
</button>
<br />
<label>
(parent) this.state.isModalOpen:
<input type="text" value={this.state.isModalOpen} />
</label>
</div>
);
}
}
ReactDOM.render(<SampleApp />, document.querySelector("#app"));
解决方案
您将状态变量isModalOpen
作为指示它是否打开的变量以及用于切换它的函数传递。用于this.toggle
切换。
<ModalExample
isOpen={this.state.isModalOpen}
toggle={this.toggle}
/>
您也在组件中使用了toggleModalView
道具ModalExample
,但是您将函数作为 传递toggle
,因此您应该this.props.toggle
改用。你也传入isModalOpen
as isOpen
,所以你应该this.props.isOpen
改用。
推荐阅读
- python - 如何在导入模块中模拟 pytest 全局变量
- spring - 如何仅通过配置禁用特定 url 的 spring 安全性?
- linux - Docker Compose 在容器的 /etc/hosts 中设置 Linux Docker 主机 IP 地址
- javascript - 为什么我的 API 请求在 javascript(Chrome 扩展程序)中被取消
- objective-c - NSUndoManager 和替换/跳过撤消步骤
- amazon-web-services - 如果给定 RDS DbiResourceId,我是否可以连接到任意 RDS 数据库实例?
- azure-logic-apps - 嵌套逻辑应用程序 - 从子级获取状态代码
- ruby-on-rails - 在 postgres 数据库中保存来自 Shopify API 的 GraphQL 查询
- php - 如何将 cmb2 限制为特定页面模板
- nativescript - Nativescript CameraPlus 预览也放大了