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>useStateonChange
  • 性能优化良好:针对大规模动态表单优化渲染,不会整表单频繁刷新;
  • 可扩展:支持自定义组件、响应式计算、设计器接入。

⚙️ 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 响应式绑定与数据保存
相关推荐
码客前端2 小时前
理解 Flex 布局中的 flex:1 与 min-width: 0 问题
前端·css·css3
Komorebi゛2 小时前
【CSS】圆锥渐变流光效果边框样式实现
前端·css
工藤学编程2 小时前
零基础学AI大模型之CoT思维链和ReAct推理行动
前端·人工智能·react.js
徐同保2 小时前
上传文件,在前端用 pdf.js 提取 上传的pdf文件中的图片
前端·javascript·pdf
怕浪猫2 小时前
React从入门到出门第四章 组件通讯与全局状态管理
前端·javascript·react.js
欧阳天风2 小时前
用setTimeout代替setInterval
开发语言·前端·javascript
EndingCoder2 小时前
箭头函数和 this 绑定
linux·前端·javascript·typescript
郑州光合科技余经理2 小时前
架构解析:同城本地生活服务o2o平台海外版
大数据·开发语言·前端·人工智能·架构·php·生活
沐墨染2 小时前
大型数据分析组件前端实践:多维度检索与实时交互设计
前端·elementui·数据挖掘·数据分析·vue·交互
xkxnq2 小时前
第一阶段:Vue 基础入门(第 11 天)
前端·javascript·vue.js