react useModal自定义弹窗代码

import type { ModalProps } from 'antd';
import { Modal } from 'antd';
import type { FormInstance } from 'antd/es/form';
import React, { useState } from 'react';

const useFormModal = (modalProps: ModalProps, Slot: React.FC<any>) => {
  const [visible, setVisible] = useState(false);
  const open = () => {
    setVisible(true);
  };
  const close = () => {
    setVisible(false);
  };
  const FormModal = (slotProps: any) => {
    const onCancel = () => {
      close();
    };

    const ref = React.useRef<FormInstance>();
    const ok = () => {
      ref.current?.submit();
    };
    return (
      <Modal onCancel={onCancel} onOk={ok} visible={visible} okText="提交" width={800} {...modalProps}>
        <Slot ref={ref} {...slotProps} afterSubmit={close} />
      </Modal>
    );
  };

  return {
    FormModal,
    open,
  };
};
export default useFormModal;


use

import {  Button } from 'antd';
import useFormModal from './coupon-modal';

export default ()=>{
  const { open, FormModal: UserModal } = useFormModal(
    { title: '新建用户' },
    React.forwardRef(() => <div>弹窗内容啦啦啦-自定义</div>)
  );
  function handleOpen() {
    open();
  }
return <>
{/* 点击打开弹窗 */}
<Button type="primary" onClick={handleOpen}>打开弹窗</Button>
   
{/* 弹窗 */}
<UserModal />

</>
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值