如何在 React 的另一个模态中打开一个模态?
How to open a modal within another modal in React?
我有 2 个组件,每个组件都有一个模态框。我希望通过另一个按钮打开其中一个模式,目前单击该按钮只会关闭当前活动模式,但不会打开新模式。
//Modal 1
<div className="modal fade" id="myModal">
<div className="modal-dialog">
<div className="modal-content">
<div className="modal-header d-flex justify-content-center">
<h4 className="modal-title">Supplier Name</h4>
</div>
<div className="modal-body">
<h3 className="text-center mt-2">Search Bar</h3>
<form>
<input
type="text"
className="form-control"
/>
</form>
<table className="table mt-5">
<thead>
<tr>
<th>Supplier Name</th>
<th>Choose Supplier</th>
</tr>
</thead>
<tbody>
{suppliers.map(supplier => (
<tr key={supplier.supplier_id}>
<td>{supplier.supplier_name}</td>
<td><button className="btn btn-info" onClick={()=> chooseSupplier(supplier.supplier_id)} data-dismiss="modal">Choose Supplier</button></td>
</tr>
))}
</tbody>
</table>
</div>
<div className="modal-footer">
<AddNewSupplier/>
<button type="button" className="btn btn-danger">Close</button>
</div>
</div>
</div>
</div>
特别是这里的 [AddNewSupplier] 按钮应该 link 到第二个模式:
<div className="modal-footer">
<AddNewSupplier/>
<button type="button" className="btn btn-danger">Close</button>
</div>
我希望能够从这个模态打开第二个
//Modal 2
<a data-dismiss="modal" data-toggle="modal" href="#myModal" className="btn btn-primary">Launch modal</a>
<div className="modal fade" id="myModal" role="dialog">
<div className="modal-dialog">
<div className="modal-content">
<div className="modal-header">
<button type="button" className="close" data-dismiss="modal">×</button>
<h4 className="modal-title">Modal Header</h4>
</div>
<div className="modal-body">
<p>Some text in the modal.</p>
</div>
<div className="modal-footer">
<button type="button" className="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
我正在使用 React、Express、Bootstrap 4. 感谢您的帮助!
看看你应该如何在 React 中使用 Boostrap 模态:https://www.pluralsight.com/guides/working-with-bootstraps-modals-react
基本上,您安装 npm 包:npm i react-bootstrap bootstrap
然后,从包中导入模态框,并将其用作包装内容的组件:
<Modal>
//your content here
</Modal>
现在模式应该由状态管理,所以你给它一个状态:
const [isModalOneOpen, setIsModalOneOpen] = useState(false) //modal is closed
现在您可以使用该状态将其作为道具传递给模态:
<Modal show={isModalOneOpen}>
//your content here and lets add a button to open the second modal from here:
<button onClick={() => setModalTwoOpen(true)}>Modal 1 will open</button>
</Modal>
<button onClick={() => setIsModalOneOpen(true)}>Open Modal 1</button> //this button will open the first modal
现在,让我们添加第二个模态框,与第一个模态框相同,但状态不同:
const [isModalTwoOpen, setIsModalTwoOpen] = useState(false);
<Modal show={isModalTwoOpen}>
//your content here
</Modal>
现在,要从任何地方关闭模态框,您只需将状态设置为要关闭的模态框的 false
,例如:
<Modal show={isModalTwoOpen}>
//your content here
<button onClick={() setIsModalTwoOpen(false)}>Close this modal</button>
</Modal>
注意:如果 Modal 1 在一个组件中,而 Modal 2 在另一个组件中,那么您需要从父组件管理两个模态的状态。此外,如评论中所述,在模态上打开模态并不是一种很好的用户体验,只是将其作为设计中的旁注。
我有 2 个组件,每个组件都有一个模态框。我希望通过另一个按钮打开其中一个模式,目前单击该按钮只会关闭当前活动模式,但不会打开新模式。
//Modal 1
<div className="modal fade" id="myModal">
<div className="modal-dialog">
<div className="modal-content">
<div className="modal-header d-flex justify-content-center">
<h4 className="modal-title">Supplier Name</h4>
</div>
<div className="modal-body">
<h3 className="text-center mt-2">Search Bar</h3>
<form>
<input
type="text"
className="form-control"
/>
</form>
<table className="table mt-5">
<thead>
<tr>
<th>Supplier Name</th>
<th>Choose Supplier</th>
</tr>
</thead>
<tbody>
{suppliers.map(supplier => (
<tr key={supplier.supplier_id}>
<td>{supplier.supplier_name}</td>
<td><button className="btn btn-info" onClick={()=> chooseSupplier(supplier.supplier_id)} data-dismiss="modal">Choose Supplier</button></td>
</tr>
))}
</tbody>
</table>
</div>
<div className="modal-footer">
<AddNewSupplier/>
<button type="button" className="btn btn-danger">Close</button>
</div>
</div>
</div>
</div>
特别是这里的 [AddNewSupplier] 按钮应该 link 到第二个模式:
<div className="modal-footer">
<AddNewSupplier/>
<button type="button" className="btn btn-danger">Close</button>
</div>
我希望能够从这个模态打开第二个
//Modal 2
<a data-dismiss="modal" data-toggle="modal" href="#myModal" className="btn btn-primary">Launch modal</a>
<div className="modal fade" id="myModal" role="dialog">
<div className="modal-dialog">
<div className="modal-content">
<div className="modal-header">
<button type="button" className="close" data-dismiss="modal">×</button>
<h4 className="modal-title">Modal Header</h4>
</div>
<div className="modal-body">
<p>Some text in the modal.</p>
</div>
<div className="modal-footer">
<button type="button" className="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
我正在使用 React、Express、Bootstrap 4. 感谢您的帮助!
看看你应该如何在 React 中使用 Boostrap 模态:https://www.pluralsight.com/guides/working-with-bootstraps-modals-react
基本上,您安装 npm 包:npm i react-bootstrap bootstrap
然后,从包中导入模态框,并将其用作包装内容的组件:
<Modal>
//your content here
</Modal>
现在模式应该由状态管理,所以你给它一个状态:
const [isModalOneOpen, setIsModalOneOpen] = useState(false) //modal is closed
现在您可以使用该状态将其作为道具传递给模态:
<Modal show={isModalOneOpen}>
//your content here and lets add a button to open the second modal from here:
<button onClick={() => setModalTwoOpen(true)}>Modal 1 will open</button>
</Modal>
<button onClick={() => setIsModalOneOpen(true)}>Open Modal 1</button> //this button will open the first modal
现在,让我们添加第二个模态框,与第一个模态框相同,但状态不同:
const [isModalTwoOpen, setIsModalTwoOpen] = useState(false);
<Modal show={isModalTwoOpen}>
//your content here
</Modal>
现在,要从任何地方关闭模态框,您只需将状态设置为要关闭的模态框的 false
,例如:
<Modal show={isModalTwoOpen}>
//your content here
<button onClick={() setIsModalTwoOpen(false)}>Close this modal</button>
</Modal>
注意:如果 Modal 1 在一个组件中,而 Modal 2 在另一个组件中,那么您需要从父组件管理两个模态的状态。此外,如评论中所述,在模态上打开模态并不是一种很好的用户体验,只是将其作为设计中的旁注。