Frontend Architecture

低代码
动态表单

基于 Schema 数据驱动设计,实现可视化拖拽的动态表单渲染与复杂校验逻辑流转

Schema 驱动
拖拽编排
动态渲染
校验流转
Background & Pain Points

痛点分析:传统表单开发的困境

在企业级应用中,表单是最核心的数据采集载体。一个中型 ERP 系统往往包含 200+ 表单页面, 传统开发模式面临效率、质量、协作的三重困境。

重复劳动

Repeated Labor

每个业务表单都从零编写 UI + 校验 + 提交逻辑,大量相似代码无法复用

70%表单代码相似度

变更成本高

High Change Cost

需求变更需要前后端同步修改、重新测试、重新部署,响应周期长达数天

3-5天平均变更周期

协作壁垒

Collaboration Gap

产品/运营无法直接参与表单配置,必须通过开发排期,形成瓶颈

85%需求方等待时间

校验碎片化

Fragmented Validation

校验逻辑散落在各组件内部,前后端不一致,边界情况易遗漏

40%Bug 来自表单校验

核心矛盾

表单的本质是「数据结构」与「UI 表现」的映射。 传统开发将两者硬编码耦合,导致每新增一个表单就意味着重复的 UI 编写、校验逻辑、提交处理。 当业务快速迭代时,表单开发成为整个系统的最大瓶颈

Motivation & Value

设计动机:从「写表单」到「描述表单」

低代码动态表单的核心思想是声明式范式转换—— 开发者不再手写每个表单项的渲染代码,而是用一份结构化的 JSON Schema 来描述表单「是什么」, 由渲染引擎自动完成「怎么做」。

效率提升

  • 新表单从「周级」交付降至「小时级」配置
  • 一套 Schema 同时驱动 PC / Mobile / 小程序
  • 校验规则声明式定义,自动前后端同步

质量保障

  • 单一数据源 (Schema) 消除前后端不一致
  • 内置类型安全与边界校验
  • 组件级单元测试覆盖率 > 95%

业务赋能

  • 非技术人员可通过可视化搭建表单
  • 实时预览 + 即时发布,零代码上线
  • A/B 测试不同表单方案成为可能

命令式 (Imperative)

// ❌ 传统方式:手写每一个表单项
function UserForm() {
  const [name, setName] = useState('');
  const [age, setAge] = useState('');
  const [errors, setErrors] = useState({});

  const validate = () => {
    const errs = {};
    if (!name) errs.name = '必填';
    if (name.length > 20) errs.name = '太长';
    if (isNaN(age)) errs.age = '需为数字';
    if (age < 0 || age > 150) errs.age = '范围';
    // ... 每个字段逐一编写
    setErrors(errs);
    return Object.keys(errs).length === 0;
  };

  return (
    <form>
      <input value={name} onChange={...} />
      {errors.name && <span>{errors.name}</span>}
      <input value={age} onChange={...} />
      {errors.age && <span>{errors.age}</span>}
    </form>
  );
}

声明式 (Declarative)

// ✅ Schema 驱动:描述而非编写
const schema = {
  fields: [
    {
      key: 'name',
      type: 'string',
      label: '用户名',
      required: true,
      rules: [
        { max: 20, message: '不超过20字符' }
      ]
    },
    {
      key: 'age',
      type: 'number',
      label: '年龄',
      rules: [
        { range: [0, 150] }
      ]
    }
  ]
};

// 一行渲染,自动校验
<SchemaForm schema={schema} />
Evolution Timeline

演进历程:五阶段进化之路

表单开发范式的演进,本质上是抽象层级不断提升的过程—— 从直接操作 DOM,到组件封装,再到数据描述,最终走向智能生成。

Phase 1

硬编码时代

每个表单手写 HTML + JS,校验逻辑与 UI 耦合,维护噩梦

Phase 2

组件化封装

Form.Item + Rules 抽象,校验与 UI 分离,但仍需手写布局

Phase 3

Schema 驱动

JSON 配置描述表单结构,渲染引擎自动解析,实现配置化

Phase 4

可视化搭建

拖拽编排 + 实时预览,非技术人员可自主配置表单

Phase 5

智能化演进

AI 辅助生成 Schema,智能推荐校验规则,自动优化布局

当前主流:Phase 3-4 融合阶段

Schema 驱动 + 可视化搭建是当前业界主流方案。Formily (蚂蚁)、FormRender (阿里)、ProForm (Ant Design Pro) 等框架已广泛落地。 Phase 5 的 AI 辅助生成正在探索中,如通过 LLM 自动生成 Schema、智能推荐校验规则等。

Comparison

对比分析:传统开发 vs 低代码表单

维度
传统开发
低代码表单
开发效率
极高
变更响应
慢 (天级)
快 (分钟级)
技术门槛
校验一致性
易遗漏
Schema 单一源
可维护性
灵活度
极高
较高
效率提升 5-10x
质量更可控
灵活度适度让步
Use Cases

应用场景:谁在使用?

企业中台

  • CRM 客户信息录入
  • ERP 单据配置
  • OA 审批流程表单
  • HR 入职信息采集

电商平台

  • 商品属性配置
  • 订单筛选条件
  • 营销活动规则
  • 商家入驻申请

医疗健康

  • 电子病历模板
  • 检验报告录入
  • 患者信息采集
  • 药品不良反应上报

教育培训

  • 在线考试问卷
  • 学员信息登记
  • 课程评价表
  • 教师考核表
Tech Stack Landscape

技术栈全景

协议层
JSON SchemaJSON FormFormily Schema
引擎层
FormilyFormRenderArco FormProForm
UI 层
Ant DesignArco DesignSemi DesignElement Plus
可视化层
DnD KitReact DnDSortableJSX6 画布
Schema Structure

JSON Schema 核心结构

form-schema.json
{
  "formId": "user-registration",
  "version": "1.0.0",
  "fields": [
    {
      "key": "username",
      "type": "string",
      "label": "用户名",
      "required": true,
      "rules": [
        { "type": "pattern", "value": "^[a-zA-Z]+$" },
        { "type": "range", "min": 2, "max": 20 }
      ]
    },
    {
      "key": "email",
      "type": "string",
      "label": "邮箱",
      "required": true,
      "rules": [
        { "type": "email" },
        {
          "type": "async",
          "validator": "checkDuplicate"
        }
      ]
    }
  ],
  "layout": { "columns": 2, "gap": 16 },
  "submit": { "api": "/api/form/submit" }
}
usernamestring必填

用户名

必填2-20字符不可含特殊符号
agenumber

年龄

数值范围 0-150整数
roleenum必填

角色

必选枚举校验
isActiveboolean

启用状态

布尔类型
JSON Schema
解析引擎
组件映射
渲染输出
Interactive Lab

🎮 拖拽编排实验场

从左侧拖拽组件到中间画布,右侧实时预览表单渲染与校验效果

组件库
输入框
数字框
下拉选择
开关
日期选择
文件上传
画布0

将左侧组件拖拽到此处

实时预览

拖入组件以预览表单

Validation Pipeline

校验逻辑流水线

每个表单字段需经过 4 阶段严格校验,确保数据合法性

用户输入

类型校验

Schema type 字段匹配

必填校验

required 字段约束

规则校验

pattern / min / max

联动校验

跨字段依赖校验

校验完成

同步校验链

Synchronous Validation Chain

type: string基础类型检查
required: true非空校验
min / max长度与范围约束
pattern正则表达式匹配
enum枚举值白名单

异步校验网

Async Validation Network

unique后端唯一性校验 (用户名/邮箱)
exists关联数据存在性验证
custom自定义业务规则函数
cross-field跨字段依赖校验
debounce防抖请求优化
Render Engine

表单渲染引擎架构

组件注册表

Component Registry

  • 组件类型 → React 组件映射
  • 支持自定义组件扩展
  • 属性面板与预览同步
  • 按需懒加载组件

布局引擎

Layout Engine

  • 栅格系统 (12/24 列)
  • 响应式断点配置
  • 嵌套布局支持
  • Flex / Grid 混合布局

状态管理

State Manager

  • 集中式表单 Store
  • 字段级订阅与更新
  • 联动计算与派生
  • Undo / Redo 历史栈
Key Takeaways

核心设计决策

01

声明式 Schema

用 JSON 描述「是什么」而非「怎么做」,解耦配置与渲染逻辑

02

策略模式校验

每种校验规则独立策略类,支持组合、优先级、短路优化

03

依赖追踪联动

字段间通过依赖图实现精准联动,避免全量重渲染

04

插件化扩展

校验器、渲染器、布局器均可通过插件注册扩展

Schema 即真理,配置即代码 ✨

低代码表单的核心价值在于将复杂的表单开发范式收敛到一份结构化的 JSON Schema 中, 让非技术人员也能通过可视化编排完成业务表单搭建。 从痛点出发,以 Schema 为基石,用引擎驱动渲染,让校验逻辑有序流转——这就是现代表单工程的完整图景。

Schema-DrivenDrag & DropValidation PipelineType-Safe