import React, { useEffect, useState, forwardRef, useImperativeHandle, } from "react"; import ReactDOM, { unmountComponentAtNode } from "react-dom"; import { Modal, ModalProps } from "./ModalMain"; import { ConfigProvider } from "../configprovider"; import { Omit } from "../_type"; export interface ModalShowOptions extends Omit {} export interface ModalShowHandle { /** * 关闭并销毁当前对话框 */ destroy: () => void; } /** * API 方式唤起一个对话框内容 */ export function show(options: ModalShowOptions): ModalShowHandle { const el = document.createElement("div"); const instanceRef = React.createRef(); ReactDOM.render( unmountComponentAtNode(el)} /> , el ); return { destroy: () => { if (instanceRef.current) { instanceRef.current.setVisible(false); } }, }; } interface ModalShowProps extends Omit {} interface ModalShowInstance { setVisible: React.Dispatch>; } const ModalShow = forwardRef(function ModalShow( props: ModalShowProps, ref: React.Ref ) { const [visible, setVisible] = useState(false); // 渲染之后,马上显示 useEffect(() => { setVisible(true); }, []); // 实例 ref 到外部 useImperativeHandle(ref, () => ({ setVisible })); return ; });