封装一个可配置的表单(基于antd)

大家好~~~我是一枚程序鱼🐟。

相信对于前端岗位来说,书写表单的功能肯定是最常有的。那面对表单里,有许多不同的类型的表单项时,我们首先想的肯定是平铺下来。其实功能是好实现的,但是对于后期的成本维护的代价比较大。所以我就想着封装一个可配置化的表单组件。

form表单中有input,radio,checkbox等类型的组件。那我能不能根据表单项的类型去渲染呢?

就比如:我可以定义一个type字段,当type='input'时,就渲染input组件……对于其他属性,我们可以不更改。但是对于有更多复杂的业务需求时,我们倒可以将组件单独的封装出去。

import React from 'react';
import { Form, Input, InputNumber, Radio, Checkbox } from 'antd';
import SelectBox from './SelectBox';
import { files } from '../../util';

const { useForm } = Form;

function ConfigurableForm() {
  const [form] = useForm();
  const renderComponents = (type) => {
    switch (type) {
      case 'input':
        return <Input />;
      case 'select':
        return <SelectBox />;
      case 'inputNumber':
        return <InputNumber />;
      case 'radio':
        return <Radio />;
      case 'checkBox':
        return <Checkbox />;
      default:
        break;
    }
  };
  return (
    <div className="form-class-style">
      <Form form={form}>
        {
          files?.map((item) => (
            <Form.Item
              {...item.formItemConfig}
              name={item.key}
              key={item.key}
            >
              {renderComponents(item.type)}
            </Form.Item>
          ))
        }
      </Form>
    </div>
  )
}

export default ConfigurableForm;

代码中的fieds是一个配置列表。 结构如下:

// 表单配置列表
export const files = [
  {
    type: 'input',
    key: 'inputname',
    formItemConfig: {
      label: 'input框',
    }
  },
  {
    type: 'select',
    key: 'selectname',
    formItemConfig: {
      label: 'select框',
    }
  },
  {
    type: 'inputNumber',
    key: 'inputNumbername',
    formItemConfig: {
      label: 'inputNumber框',
      max: 100,
      min: 0,
    }
  },
  {
    type: 'radio',
    key: 'radioname',
    formItemConfig: {
      label: 'radio框',
    }
  },
  {
    type: 'Checkbox',
    key: 'Checkboxname',
    formItemConfig: {
      label: 'Checkbox框',
    }
  }
];

关于表单的样式,我觉得大家可以自行去调整。

 

最近我发现了这个链接,react-jsonschema-form同样的这也可以通过配置,来渲染表单。

感觉有帮助的小伙伴点个赞呗~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值