以下是一个基于React和Antd的表单弹窗组件的实现示例。该组件可以根据传入的props渲染不同的表单,支持表单校验和提交,并且可以在提交成功后显示成功提示信息。

import React, { useState } from 'react';
import { Modal, Form, Input, Button, message } from 'antd';

const FormModal = ({ title, visible, onCancel, onSubmit, formFields }) => {
  const [form] = Form.useForm();
  const [loading, setLoading] = useState(false);

  const handleOk = async () => {
    setLoading(true);
    try {
      const values = await form.validateFields();
      await onSubmit(values);
      message.success('提交成功');
      setLoading(false);
      onCancel();
    } catch (error) {
      setLoading(false);
    }
  };

  return (
    <Modal
      title={title}
      visible={visible}
      onCancel={onCancel}
      footer={[
        <Button key="cancel" onClick={onCancel}>
          取消
        </Button>,
        <Button key="submit" type="primary" loading={loading} onClick={handleOk}>
          提交
        </Button>,
      ]}
    >
      <Form form={form}>
        {formFields.map((field) => (
          <Form.Item
            key={field.name}
            label={field.label}
            name={field.name}
            rules={[{ required: true, message: `请输入${field.label}` }]}
          >
            <Input />
          </Form.Item>
        ))}
      </Form>
    </Modal>
  );
};

export default FormModal;

该组件需要传入以下props:

  • title: 弹窗标题
  • visible: 弹窗是否可见
  • onCancel: 取消按钮点击事件处理函数
  • onSubmit: 提交按钮点击事件处理函数,需要返回Promise
  • formFields: 表单字段的配置数组,每个配置包括label和name两个属性

使用示例:

import React, { useState } from 'react';
import FormModal from './FormModal';

const Example = () => {
  const [visible, setVisible] = useState(false);

  const handleOpenModal = () => {
    setVisible(true);
  };

  const handleCloseModal = () => {
    setVisible(false);
  };

  const handleSubmit = (values) => {
    // 处理表单提交逻辑,返回Promise
  };

  const formFields = [
    { label: '用户名', name: 'username' },
    { label: '密码', name: 'password' },
  ];

  return (
    <div>
      <button onClick={handleOpenModal}>打开弹窗</button>
      <FormModal
        title="示例表单弹窗"
        visible={visible}
        onCancel={handleCloseModal}
        onSubmit={handleSubmit}
        formFields={formFields}
      />
    </div>
  );
};

export default Example;
实现一个基于React、Antd的表单弹窗组件

原文地址: https://www.cveoy.top/t/topic/kno 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录