import React, { useCallback, useState } from 'react'; import { Modal, Button } from 'antd'; import { ModalProps } from 'antd/lib/modal'; export type ModalOverlayRender = (props: { close: () => void; }) => React.ReactNode; export type ModalChildrenRender = (props: { open: () => void; }) => React.ReactNode; /** * Modal触发器 */ export const ModalTrigger: React.FC<{ disabled?: boolean; overlay?: ModalOverlayRender; children?: ModalChildrenRender; } & Omit> = props => { const { disabled } = props; const [vis, setVis] = useState(false); const open = useCallback(() => { if (disabled) return; setVis(true); }, [disabled]); const close = useCallback(() => setVis(false), []); const { children, overlay, ...modalProps } = props; return ( <> } maskClosable={false} > {overlay ? overlay({ close }) : <>} {children && children({ open })} ); }; export default ModalTrigger;