跳转至

openModal 弹窗管理工具使用说明

概述

openModal 是一个基于 React 18+ 和 Ant Design Modal 的高阶弹窗管理工具,提供了动态创建、更新和销毁弹窗的能力,支持 TypeScript 类型提示。

安装与导入

import { openModal } from './openModal';
import YourDialogComponent from './YourDialogComponent';

核心功能

基本用法

// 定义弹窗组件
interface IProps extends IModalBaseProps {
    record?: any;
}

const MyDialog = (props: IProps) => {
    const onSubmit = () => {
        // todo
        props.onClosed?.({ ok: true });
    };
    return (
        <Modal
            title='标题'
            onCancel={() => props.onClosed?.({ cancel: true })}
            onOk={onSubmit}
            {...props}
        >
            <p>弹窗内容</p>
        </Modal>
    );
};

// 打开弹窗
const modalIns = openModal(MyDialog, {
    onClosed: () => {
        modalIns.destroy();
    },
});

控制弹窗

// 更新弹窗属性
modal.update({ title: '新的标题' });

// 关闭弹窗(触发onClosed回调)
modal.destroy();

// 带参数的关闭
modal.destroy({ ok: true }); // 表示通过确定按钮关闭

高级特性

类型安全(TypeScript)

interface IDialogProps {
    title: string;
    content: string;
    onClosed?: (params?: { cancel?: boolean }) => void;
}

const modal = openModal<IDialogProps>(MyDialog, {
    title: '类型安全示例',
    content: '类型提示会生效',
});

批量销毁所有弹窗

// 在需要的地方调用(如路由切换时)
destroyFns.forEach(destroy => destroy());

自定义关闭逻辑

openModal(MyDialog, {
    title: '自定义关闭',
    onClosed: params => {
        if (params?.ok) {
            console.log('用户点击了确定');
        } else {
            console.log('用户取消了');
        }
    },
});