codepen.io/Kevin-Loeng…
const CreateModalTest = (props) => {
const {children, visible, closeModal} = props;
const bodyOverflow = useRef(window.getComputedStyle(document.body).overflow);
useEffect(() => {
if (visible) {
document.body.style.overflow = 'hidden';
} else {
document.body.style.overflow = bodyOverflow.current;
}
}, [visible]);
const handleClick = (event) => {
if (event.target === event.currentTarget) {
closeModal();
}
}
const modal = ReactDOM.createPortal(
<div className="comp-modal-one" onClick={handleClick}>
{children}
</div>,
document.body
);
return <div>{visible && modal}</div>;
}
使用
const modalConfig = {
visible: modalVisible,
closeModal: () => {
setModalVisible(false);
}
};
<CreateModalTest {...modalConfig}>
<CompProjectEdit/>
</CreateModalTest>