React封装静态方法打开Modal弹窗

文章介绍了如何在React项目中使用AntDesign库的Modal组件创建一个可配置的静态方法弹窗,并结合useState和Form组件展示了一个申请表单的实例。
摘要由CSDN通过智能技术生成

组件代码:

import React, { useState } from 'react';
import { Modal } from 'antd';
import { render } from 'rc-util/lib/React/render';

/** 关闭静态方法弹窗 */
export const closeModal = (wrapKey: string) => {
    const div = document.getElementById(wrapKey);
    if (div) document.body.removeChild(div);
}

type ModalProps = {
    wrapKey: string;
    content: React.ReactNode;
    title?: string;
    onOk: (setOpen?: (open: boolean) => void) => void;
    onCancel?: () => void;
}

/** 静态方法弹窗组件 */
const ModalFunction = (props: ModalProps) => {
    // 是否打开弹窗
    const [open, setOpen] = useState(true);

    // 点击确认
    const handleOk = () => {
        props.onOk(setOpen)
    }

    // 点击取消
    const handleCancel = () => {
        setOpen(false);
        props.onCancel?.();
        setTimeout(() => {
            closeModal(props.wrapKey);
        }, 300);
    }

    return <Modal
        key={props.wrapKey}
        open={open}
        title={props.title}
        onOk={handleOk}
        onCancel={handleCancel}
        getContainer={() => document.getElementById(props.wrapKey) as HTMLElement}
    >
        {props.content}
    </Modal>
}

export default ModalFunction;

/** 打开静态方法弹窗 */
export const openModal = (props: ModalProps) => {
    const div = document.createElement('div');
    div.id = props.wrapKey;
    document.body.appendChild(div);
    render(<ModalFunction {...props} />, div);
}

调用:

import React, { useEffect } from 'react';
import type { FormInstance } from 'antd';
import { Form, Input } from 'antd';
import { openModal } from '@/components/modal-function';

type PropsType = {
    getForm: (form: FormInstance<any>) => void;
}

/** 申请表单 */
const ApplyForm = (props: PropsType) => {
    // form实例
    const [form] = Form.useForm();

    useEffect(() => {
        props.getForm(form);
    }, [form, props]);

    return <Form form={form}>
        <Form.Item
            label="申请理由"
            name="applyReason"
            rules={[
                { required: true, message: '请输入申请理由' }
            ]}
        >
            <Input.TextArea placeholder="请输入" />
        </Form.Item>
    </Form>
}

/** 打开申请表单 */
export const openConfigPermissionApplyForm = () => {
    let form: FormInstance<any> | null = null;
    openModal({
        title: '申请',
        wrapKey: 'applyModal',
        content: <ApplyForm getForm={formRef => { form = formRef }} />,
        onOk: () => {
            form?.validateFields().then(values => {
                console.log('values', values);
            })
        },
    })
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
React Modal 是一个常用的组件库,可以用来实现输入框的功能。下面是一个简单的实现示例: 首先,你需要引入 React Modal: ```javascript import Modal from 'react-modal'; ``` 然后,在你的组件中,你需要定义一个状态来控制的显示与隐藏: ```javascript function MyComponent() { const [modalIsOpen, setModalIsOpen] = useState(false); const openModal = () => { setModalIsOpen(true); }; const closeModal = () => { setModalIsOpen(false); }; return ( <div> <button onClick={openModal}>打开</button> <Modal isOpen={modalIsOpen} onRequestClose={closeModal} > <h2>请输入:</h2> <input type="text" /> <button onClick={closeModal}>确定</button> </Modal> </div> ); } ``` 在这个示例中,我们定义了一个状态 `modalIsOpen`,表示是否打开。当用户点击打开的按钮时,我们调用 `openModal` 函数来更新状态,打开。当用户点击中的确定按钮或者关闭时,我们调用 `closeModal` 函数来更新状态,关闭。 在中,我们可以通过普通的 HTML 元素来实现输入框和按钮。在这个示例中,我们定义了一个输入框和一个确定按钮,用户可以在输入框中输入内容,并点击确定按钮来关闭。 需要注意的是,在 React Modal 中,我们需要通过 `isOpen` 属性来控制的显示与隐藏。当 `isOpen` 的值为 `true` 时,会显示出来;当 `isOpen` 的值为 `false` 时,会隐藏起来。同时,我们还需要定义一个 `onRequestClose` 回调函数,来处理用户点击以外的区域时,自动关闭的情况。 希望这个示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值