React 动态表单封装
import Component from "./Component";
import { Form, Button } from "antd";
const onFinish = (values) => {
console.log("Success:", values);
};
const FormC = ({ data }) => {
return (
<Form onFinish={onFinish}>
{data.map((item, index) => {
let { label, name, rules, valuePropName, ...restProps } = item;
return (
<Form.Item
label={label}
name={name}
rules={rules}
valuePropName={valuePropName}
key={index}
>
<Component {...restProps}></Component>
</Form.Item>
);
})}
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
);
};
export default FormC;
FormC 组件 ⬆️
const Component = ({ is, children, ...restProps }) => {
const Tag = require("antd")[is];
if (!Tag) return false;
return <Tag {...restProps}>{children}</Tag>;
};
export default Component;
ComponentC ⬆️
使用
const data = [
{
is: "Input",
label: "测试",
name: "test",
},
{
label: "案例",
name: "done",
valuePropName: "checked",
is: "Switch",
onClick: () => console.log(3333),
},
];
<FormC data={data}></FormC>

浙公网安备 33010602011771号