一个基于 React 的动态表单引擎,支持表单动态渲染、字段验证、事件处理和布局控制。
coding-form/
├── packages/
│ └── form-view/ # 核心表单视图库
│ ├── src/
│ │ ├── form/ # 表单组件
│ │ ├── factory/ # 表单项工厂
│ │ ├── register/ # 组件注册中心
│ │ ├── store/ # Redux 状态管理
│ │ ├── context/ # React Context
│ │ ├── instance/ # 表单实例控制
│ │ ├── presenters/ # 表单展示层
│ │ ├── validate/ # 表单验证
│ │ ├── event/ # 事件处理
│ │ ├── layout/ # 布局系统
│ │ ├── hooks/ # 自定义 Hooks
│ │ └── types/ # TypeScript 类型定义
│ └── dist/ # 构建输出
├── apps/ # 示例应用
│ ├── app-pc/ # PC 端示例
│ └── app-mobile/ # 移动端示例
└── package.json # 工作区配置
通过元数据(Meta)动态生成表单,支持:
- 多种数据类型:
STRING,INTEGER,LONG,DOUBLE,BOOLEAN - 字段属性:名称、编码、类型、默认值、提示等
- 嵌套子表单(subForms)
interface FormFieldValidator {
target: FieldKey; // 校验目标字段
validator: (instance: FormInstance, value: any) => boolean | string;
}- 支持自定义验证规则
- 异步验证支持
- 隐藏字段自动跳过验证
支持表单事件绑定和处理:
interface FormEvent {
type: 'load' | 'change' | 'blur'; // 事件类型
target: FieldKey; // 事件目标
event: (formInstance: FormInstance, value: any) => void;
}load: 表单加载时触发change: 字段值变化时触发blur: 字段失去焦点时触发
支持卡片布局和默认布局:
interface FormLayout {
formCode: string;
type: 'card';
props: CardLayout
}
interface CardLayout {
title: string;
layout: 'horizontal' | 'vertical';
fields: FieldLayout[];
mainFields: string[];
}提供丰富的表单操作方法:
// 获取/设置字段值
getFieldValue(name: string, formCode?: string)
getFieldsValue(formCode?: string)
setFieldValue(name: string, value: any, formCode?: string)
setFieldsValue(values: any, formCode?: string)
// 表单操作
resetFields(nameList?: string[], formCode?: string)
validateFields(nameList?: string[], formCode?: string)
submit(formCode?: string)
// 动态控制
hiddenFields(hidden: boolean, nameList: string[]|string, formCode?: string)
requiredFields(required: boolean, nameList: string[]|string, formCode?: string)pnpm installimport { FormRegistry } from '@coding-form/form-view';
import YourFormComponent from './YourFormComponent';
import formInstanceFactory from './formInstanceFactory';
FormRegistry.getInstance().register(YourFormComponent, formInstanceFactory);import { FormView } from '@coding-form/form-view';
const meta = {
name: '用户信息',
code: 'user_form',
fields: [
{
id: '1',
name: '姓名',
code: 'name',
type: 'text_input',
dataType: 'STRING',
hidden: false,
required: true,
placeholder: '请输入姓名'
}
]
};
<FormView meta={meta} />;# 监听构建 form-view
pnpm watch:form-view
# 运行 PC 示例应用
pnpm dev:app-pc
# 运行移动端示例应用
pnpm dev:app-mobilepnpm build- React 18 - UI 框架
- TypeScript - 类型系统
- Redux Toolkit - 状态管理
- React Redux - React 绑定
- Rslib - 构建工具
| 属性 | 类型 | 说明 |
|---|---|---|
| meta | FormMeta | 表单元数据定义 |
| form | FormInstance | 表单实例 |
| onValuesChange | (values: any) => void | 值变化回调 |
| review | boolean | 是否预览模式 |
| validators | FormFieldValidator[] | 验证规则数组 |
| events | FormEvent[] | 事件定义数组 |
| layouts | FormLayout[] | 布局定义数组 |
| 类型 | 说明 |
|---|---|
| STRING | 字符串 |
| INTEGER | 整数 |
| LONG | 长整数 |
| DOUBLE | 小数 |
| BOOLEAN | 布尔值 |