FlowEngine
在 NocoBase 中,FlowEngine(流引擎) 是驱动可视化配置的核心引擎。NocoBase 界面上的区块、字段、操作按钮,都是通过 FlowEngine 来管理的——包括它们的渲染、配置面板、以及配置的持久化。

对于插件开发者来说,FlowEngine 提供了两个核心概念:
- FlowModel — 可配置的组件模型,负责渲染 UI 和管理 props
- Flow — 配置流程,定义组件的配置面板和数据处理逻辑
如果你的组件需要出现在「添加区块 / 字段 / 操作」菜单里,或者需要支持用户在界面上进行可视化配置,就需要用 FlowModel 来包装。如果不需要这些能力,用普通 React 组件就够了——见 Component vs FlowModel。
FlowModel 是什么
跟普通 React 组件不同,FlowModel 除了负责渲染 UI,还管理着 props 的来源、配置面板的定义、以及配置持久化。简单来说:普通组件的 props 是写死的,FlowModel 的 props 是通过 Flow 动态生成的。
想深入了解 FlowEngine 的整体架构,可以看 FlowEngine 完整文档。下面从插件开发者的角度,介绍怎么用。
最小示例
一个 FlowModel 从创建到注册,分三步:
1. 继承基类,实现 renderComponent
renderComponent() 就是这个模型的渲染方法,类似 React 组件的 render()。tExpr() 用于延迟翻译——因为 define() 在模块加载时就执行了,此时 i18n 还没初始化。详见 Context 常用能力 → tExpr。
2. 在 Plugin 里注册
3. 在界面上使用
注册完成后,通过启动插件之后(启用插件可以参考插件开发概述),在 NocoBase 界面新建页面,点击「添加区块」就能看到你的「Hello block」了。

用 registerFlow 添加配置项
光能渲染还不够——FlowModel 的核心价值在于可配置。通过 registerFlow() 可以给模型添加配置面板,让用户在界面上修改属性。
比如一个支持编辑 HTML 内容的区块:
这里面几个关键点:
on: 'beforeRender'— 表示这个 Flow 在渲染前执行,配置面板的值会在渲染前写入this.propsuiSchema— 用 JSON Schema 格式定义配置面板的 UI,语法参考 UI Schemahandler(ctx, params)—params是用户在配置面板填写的值,通过ctx.model.props设置到模型上defaultParams— 配置面板的默认值
uiSchema 常用写法
uiSchema 基于 JSON Schema,v2 对 uiSchema 语法是兼容的,不过使用场景有限——主要用在 Flow 的配置面板中描述表单 UI。大部分运行时的组件渲染推荐直接用 Antd 组件实现,不需要走 uiSchema。
这里列出最常用的几种组件(完整参考见 UI Schema):
每个字段都用 'x-decorator': 'FormItem' 包裹,这样会自动带上标题和布局。
define() 参数说明
FlowModel.define() 用于设置模型的元数据,控制它在菜单中的显示方式。插件开发中最常用的是 label,不过它还支持更多参数:
大多数插件只需要设置 label:
如果需要控制排序或隐藏,可以加上 sort 和 hide:
FlowModel 基类选择
NocoBase 提供了多个 FlowModel 基类,根据你要扩展的类型选择:
通常来说,做表格区块用 TableBlockModel(最常用,开箱即用),需要完全自定义渲染用 CollectionBlockModel 或 BlockModel,做字段用 FieldModel,做操作按钮用 ActionModel。
相关链接
- 区块扩展 — 用 BlockModel 系列基类开发区块
- 字段扩展 — 用 FieldModel 开发自定义字段
- 操作扩展 — 用 ActionModel 开发操作按钮
- Component vs FlowModel — 不确定该用哪 种方式?
- FlowDefinition 流定义 — registerFlow 的完整参数说明和事件类型列表
- FlowEngine 完整文档 — FlowModel、Flow、Context 的完整参考
- FlowEngine 快速开始 — 从零构建一个可编排的按钮组件
- 插件开发概述 — 插件开发整体介绍
- UI Schema — uiSchema 语法参考

