我试图从另一个组件打开一个模态。这在我的父组件中:
import { Button, Modal } from 'react-bootstrap';
import React, { useState } from 'react';
import './App.css';
import ModalB from './ModalB';
function App() {
const [showA, setShowA] = useState(false);
const [showB, setShowB] = useState(false);
const handleCloseA = () => setShowA(false);
const handleShowA = () => setShowA(true);
const handleShowB = ({ handleShow }) => {
setShowB(handleShow);
};
return (
<div className="App">
<header className="App-header">
<Button variant="primary" onClick={handleShowA}>Open A</Button>
<Button variant="primary" onClick={handleShowB}>Open B</Button>
<Modal show={showA} onHide={handleCloseA}>
<Modal.Header closeButton>
<Modal.Title>In Modal A</Modal.Title>
</Modal.Header>
</Modal>
<ModalB isModalVisible={showB}></ModalB>
</header>
</div>
);
}
export default App;
和模态b组件:
import { Button, Modal } from 'react-bootstrap';
import React, { useState } from 'react';
import { propTypes } from 'react-bootstrap/esm/Image';
const ModalB = (props) => {
const [showB, setShowB] = useState(false);
const handleCloseB = () => setShowB(false);
const handleShowB = () => setShowB(true);
return (
<div>
<Modal show={props.isModalVisible} onHide={handleCloseB}>
<Modal.Header closeButton>
<Modal.Title>In Modal B</Modal.Title>
</Modal.Header>
</Modal>
</div>
);
}
export default ModalB;
问题是显示主部件的b。虽然显示modala很简单,但我不明白如何告诉b从主组件显示。
谢谢你的帮助。
2条答案
按热度按时间0sgqnhkj1#
从中删除“显示”状态
ModalB
并通过handleShowB
来自父级的处理程序。在父通道中
handleShowB
处理程序。这里我们只传递一个匿名回调来调用setShowB
状态更新程序并更新showB
声明是错误的。nxowjjhe2#
常量handleshowb=({handleshow})=>{setshowb(handleshow);};
你为什么需要
handleShow
如果这是未定义的?只要根据当前状态更新状态,其余代码就可以正常工作。
这将触发当前模式状态(天气隐藏/显示)
ModalB
组件,它将相应地渲染。下面是工作演示:https://codesandbox.io/s/show-multiple-modals-edv6y