designable和formily实现简单的低代码平台学习

🧩 Formily 从 Designable 到运行态全流程解析

源码仓库:github.com/alibaba/for...


🧠 What --- 从 Designable 到 Formily

阶段 框架 作用 输出
🧩 设计态 Designable 拖拽组件、配置字段属性 生成 Schema(JSON 格式)
🗄️ 后端 存储层 保存 Schema 到数据库 schema: string (JSON)
🧠 运行态 Formily 前端根据 Schema 渲染真实表单 const form = createForm(); <SchemaField schema={schema} />

💡 Why --- 为什么使用 Formily

  • ✅ 复杂表单场景更轻松:适合字段多、联动复杂、条件渲染的表单;
  • ✅ 低代码支持 :使用 Schema 描述字段、校验、联动逻辑,摆脱大量重复的 <Form.Item>、useState、onChange;
  • ✅ 性能优化良好:针对大规模动态表单优化渲染,不会整表单频繁刷新;
  • ✅ 可扩展:支持自定义组件、响应式计算、设计器接入。

⚙️ How --- 核心流程拆解


1️⃣ 设计态(Designable)

输入 :组件元信息(注册表)
输出:Schema(JSON)

🧩 流程概述:
  1. 用户在可视化设计器中 拖拽组件 → 属性编辑 → 保存;

  2. Designable 内部使用 TreeNode 描述组件层级;

  3. 每次操作封装为 Operation(支持撤销 / 重做);

  4. 设计器引擎 Engine 将 NodeTree 转换为标准 JSON Schema:

    ts 复制代码
    const schema = engine.getCurrentTree().serialize();
  5. 前端通过 API 将 schema 持久化保存到后端。

📦 产物: schema.json(表单结构模板)


2️⃣ 存储层

输入 :schema
输出 :schema + config

🗄️ 后端逻辑:
  • 后端保存两类数据:
    • schema:组件结构、字段定义;
    • config:表单初始值或用户配置;
  • 支持版本号管理(v1、v2、v3);
  • 提供接口:
    • GET /api/schema/:id
    • POST /api/config/:id

3️⃣ 运行态(Formily)

输入 :schema + config
输出:渲染出的动态表单与字段绑定关系

Formily 是一个 Schema 驱动的表单渲染引擎 。

它不会写死表单结构,而是解析 schema 中的层级关系、组件类型与修饰器,动态生成对应的 React 节点。


🧩 渲染流程:
  1. 加载后端返回的 schema 与 config:

    ts 复制代码
    const { schema, config } = await fetch("/api/schema-config").then((res) =>
      res.json()
    );
  2. 创建表单实例与组件映射:

    ts 复制代码
    const form = createForm();
    const SchemaField = createSchemaField({
      components: { FormItem, Input, Select, Switch, Text },
    });

    每个 x-component 对应一个真实 React 组件:

    • "Input" → <Input />
    • "Select" → <Select />
    • "Switch" → <Switch />
    • "x-decorator": "FormItem" 决定是否包裹在 <Form.Item> 内。
  3. 初始化表单数据:

    ts 复制代码
    form.setValues(config);
  4. 渲染阶段:

    tsx 复制代码
    <FormProvider form={form}>
      <SchemaField schema={schema} />
    </FormProvider>
    • Formily 递归遍历 Schema 树;
    • 每个节点生成对应的 Field;
    • schema.name 映射为 form.values 的字段路径;
    • 属性(placeholder、title、x-validator 等)自动绑定。

🧩 字段映射关系
Schema 字段 数据路径 渲染组件类型 示例
discord_link form.values.discord_link Input Discord 链接输入框
title form.values.title Text 静态文本标题
isVisible form.values.isVisible Switch 布尔开关

Formily 根据 schema 自动完成 字段注册、依赖追踪与响应式更新。


4️⃣ 数据交互与保存

输入 :用户交互数据
输出 :新的 config

🔁 流程:
  1. 用户修改表单;

  2. Formily 自动更新 form.values;

  3. 点击保存按钮后提交到后端:

    ts 复制代码
    fetch("/api/config", {
      method: "POST",
      body: JSON.stringify(form.values),
    });
  4. 后端更新 config 字段。

📄 最终结果:

结构(schema)与数据(config)完全解耦,可复用、可版本化、可低代码配置。


📚 总结

阶段 框架 核心产物 关键点
设计态 Designable Schema(JSON) 可视化拖拽生成结构描述
存储层 后端 Schema + Config 持久化与版本管理
运行态 Formily 动态表单 解析 Schema → 渲染组件
数据层 Formily + API Config 响应式绑定与数据保存
相关推荐
小poop7 小时前
CSS 基础与实战:从入门到精通网页美化
前端
Csvn8 小时前
运行时性能
前端
Never_every999 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck9 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖10 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
欣欣之王来了11 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒11 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师12 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端
特立独行的猫A12 小时前
10 MB 的桌面 AI 客户端:用仓颉 + 系统 WebView 替代 Electron
前端·harmonyos
修炼的dance13 小时前
白底图存JPG,sharp开mozjpeg背景杂点少近三成
前端