Uform
基于antd表单实现的平铺式表单组件,支持通用表单和弹框表单2种,支持Input、InputNumber、Textarea、Select、Radio、Checkbox、Password、Switch、Rate、custom(自定义ReactNode)。
Install / Use
/learn @dadaiwei/UformREADME
uform
基于 antd 表单实现的自定义表单,简单实用,支持常用表单及弹窗表单,支持Input、InputNumber、Textarea、Select、Radio、Checkbox、Password、Switch、Rate、custom(自定义ReactNode)。
documentation:https://dadaiwei.github.io/uform <br> npm:https://www.npmjs.com/package/uform
基本介绍
基于 antd 组件库定制的简单易用 Form,支持通用表单及弹框表单两种形式,支持 Input、InputNumber、Textarea、Select、Radio、Checkbox、Password、Switch、Rate、custom(自定义 ReactNode)。
使用指南
1.安装 UForm 依赖包
npm install uform --save-dev
2.引入依赖包
import UForm from "uform";
import "uform/dist/uform.css";
3.使用 UForm 组件
<UForm
data={data}
fields={fields}
onChange={onChange}
onCancel={onCancel}
onSubmit={onSubmit}
/>
代码演示
通用表单

代码
import React, { useState } from "react";
import UForm from "uform";
import "uform/dist/uform.css";
function NormalForm() {
const [data, setData] = useState({
name: "",
size: 1,
city: 0,
area: "郊区",
password: "",
choosen: true,
confirm: true,
rate: 3,
describe: ""
});
const fields = [
{
name: "name",
label: "名称",
type: "input",
placeholder: "请输入名称",
rules: [
{
required: true,
message: "请输入名称"
}
]
},
{
name: "size",
label: "大小",
type: "inputNumber",
placeholder: "请输入大小",
rules: [
{
required: true,
message: "请输入名称"
}
]
},
{
name: "city",
label: "城市",
type: "select",
fieldData: [
{
name: "北京",
value: 0
},
{
name: "上海",
value: 1
},
{
name: "杭州",
value: 2
},
{
name: "深圳",
value: 3
}
],
rules: [
{
required: true,
message: "请输入名称"
}
]
},
{
name: "area",
label: "地区",
type: "radio",
fieldData: ["城区", "郊区"]
},
{
name: "confirm",
label: "确认选择",
type: "checkbox",
rules: [
{
required: true,
message: "请确认选择"
}
]
},
{
name: "custom",
label: "自定义项",
type: "custom",
node: (
<div>
<h2>自定义表单项</h2>
</div>
)
},
{
name: "password",
label: "密码",
type: "password",
rules: [
{
required: true,
message: "请输入密码"
}
]
},
{
name: "choosen",
label: "是否选择",
type: "switch",
checkedChildren: "开",
unCheckedChildren: "关",
rules: [
{
required: true,
message: "请输入密码"
}
]
},
{
name: "rate",
label: "评分",
type: "rate"
},
{
name: "describe",
label: "描述",
type: "textarea",
placeholder: "请输入描述"
}
];
const onChange = (result) => {
setData({
...data,
...result
});
};
const onSubmit = (values) => {
console.log(values);
};
const onCancel = () => {
console.log("cancel");
};
return (
<div>
<div style={{ width: 600, marginLeft: 100 }}>
<UForm
data={data}
fields={fields}
onChange={onChange}
onCancel={onCancel}
onSubmit={onSubmit}
/>
</div>
</div>
);
}
弹窗表单

代码
import React, { useState } from "react";
import { Button } from "antd";
import UForm from "uform";
import "uform/dist/uform.css";
function ModalForm() {
const { visible, setVisible } = useState(false);
const [data, setData] = useState({
name: "",
size: 1,
city: 0,
area: "郊区",
password: "",
choosen: true,
confirm: true,
rate: 3,
describe: ""
});
const fields = [
{
name: "name",
label: "名称",
type: "input",
placeholder: "请输入名称",
rules: [
{
required: true,
message: "请输入名称"
}
]
},
{
name: "size",
label: "大小",
type: "inputNumber",
placeholder: "请输入大小",
rules: [
{
required: true,
message: "请输入名称"
}
]
},
{
name: "city",
label: "城市",
type: "select",
fieldData: [
{
name: "北京",
value: 0
},
{
name: "上海",
value: 1
},
{
name: "杭州",
value: 2
},
{
name: "深圳",
value: 3
}
],
rules: [
{
required: true,
message: "请输入名称"
}
]
},
{
name: "area",
label: "地区",
type: "radio",
fieldData: ["城区", "郊区"]
},
{
name: "confirm",
label: "确认选择",
type: "checkbox",
rules: [
{
required: true,
message: "请确认选择"
}
]
},
{
name: "custom",
label: "自定义项",
type: "custom",
node: (
<div>
<h2>自定义表单项</h2>
</div>
)
},
{
name: "password",
label: "密码",
type: "password",
rules: [
{
required: true,
message: "请输入密码"
}
]
},
{
name: "choosen",
label: "是否选择",
type: "switch",
checkedChildren: "开",
unCheckedChildren: "关",
rules: [
{
required: true,
message: "请输入密码"
}
]
},
{
name: "rate",
label: "评分",
type: "rate"
},
{
name: "describe",
label: "描述",
type: "textarea",
placeholder: "请输入描述"
}
];
const onChange = (result) => {
setData({
...data,
...result
});
};
const onSubmit = (values) => {
console.log(values);
};
const onCancel = () => {
setVisible(false);
};
return (
<div>
<Button
type='primary'
onClick={() => {
setVisible(true);
}}>
打开弹窗表单
</Button>
<div style={{ width: 600, marginLeft: 100 }}>
<UForm
type="modal"
visible={visible}
title='新建表单'
data={data}
fields={fields}
onChange={onChange}
onCancel={onCancel}
onSubmit={onSubmit}
/>
</div>
</div>
);
}
API
公共 API
| 属性 | 说明 | 必填属性 | 类型 | 可选值 | 默认值 | | :--------- | :----------------------- | :------- | :--------------- | :-------------------------------- | :--------- | | type | 使用通用表单或者弹框表单 | false | string | norma | modal | normal | | layout | 表单布局 | false | string | horizontal | vertical | inline | horizontal | | labelCol | 表单 label 占宽 | false | number | 1-24 之间整数 | 4 | | wrapperCol | 表单内容项占宽 | false | number | 1-24 之间整数,通常为 24-labelCol | 16 | | loading | 确定按钮 loading | false | boolean | true | false | false | | data | 表单数据 | true | any[ ] | - | [ ] | | fields | 表单每一项特征描述 | true | any[ ] | - | [ ] | | onSubmit | 表单提交回调 | true | Function(values) | - | 无 | | onChange | 表单每一项修改回调 | false | Function(value) | - | 无 | | onCancel | 表单取消回调 | false | Function( ) | - | 无 |
fields props
| 属性 | 说明 | 必填属性 | 类型 | 可选值 | 默认值 | | :--------- | :---------------------------------------------- | :------- | :--------- | :------------------------------------------------------------------------------------------------------------------ | :----- | | name | 表单数据 name,与 data 中 key 值一致 | true | string | - | 无 | | type | 表单项类型 | true | string | input | inputNumber | textarea | select | radio | checkbox | password | switch | rate | custom(自定义项) | 无 | | label | 表单项 label | true | string | - | 无 | | rules | 表单项限制规则,与 antd Form 限制规则一致 | false | object [ ] | - | 无 | | fieldData | 适用于 type 为 select/radio 的选择项 | true | object [ ] | - | 无 | | placehoder | 适用于 type 为 input/textarea/select 的提示信息 | false | string | - | 无 | | node | 适用于 type 为 custom 的自定义 ReactNode | true | ReactNode | - | 无 |
特别说明:type 类型为 select/radio时, fieldsData 是必填属性, type 类型为 custome 时, node 是必填属性。
通用表单特有 API
| 属性 | 说明 | 必填属性 | 类型 | 可选值 | 默认值 | | :--------------- | :--------------- | :
Related Skills
node-connect
347.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
