构建交互式基于节点的界面——无论是用于工作流程编辑器、可视化编程工具,还是数据管道设计器——都是前端开发中最具挑战性的任务之一。您需要处理缩放和平移、节点拖拽和定位、边线路由和渲染,以及图形交互的所有复杂性。Vue Flow 将 React Flow 交互模型的力量带到了 Vue 3 生态系统中,提供一个精致、高性能且深度可自定义的流程图组件。
由 bcakmakoglu 创建,Vue Flow 专为 Vue 3 的 Composition API 量身打造,利用 Vue 的响应式系统实现响应式节点更新和无缝状态管理。该库在 Vue 生态系统中获得了显著的关注,开发者用它来构建从 AI 工作流程编辑器到低代码平台再到网络拓扑可视化器的各种应用。
Vue Flow 与众不同之处在于它结合了开箱即用的功能性和深度自定义能力。您无需编写任何交互代码即可获得缩放、平移、小地图、选择、拖放和键盘快捷键。但每个视觉元素——从节点渲染到边线样式再到控件组件——都可以替换为您自己的自定义 Vue 组件。
Vue Flow 的架构如何运作?
Vue Flow 建立在一个分层架构之上,将图形状态管理、渲染和交互处理分离开来。
graph TD
A[Vue Flow 组件] --> B[图形状态管理]
A --> C[视口控制器]
A --> D[交互层]
B --> E[节点存储库]
B --> F[边线存储库]
C --> G[缩放与平移]
C --> H[小地图]
D --> I[选择]
D --> J[拖放]
D --> K[键盘]
E --> L[节点渲染器]
F --> M[边线渲染器]
L --> N[自定义 Vue 组件]
M --> N
状态管理层维护节点和边线的响应式存储库,视口控制器处理摄像机变换,交互层将用户输入转换为状态变更。这种分离确保自定义组件只需关心渲染,无需处理交互逻辑。
Vue Flow 支持哪些节点和边线类型?
Vue Flow 内置一组节点和边线类型,同时让创建自定义类型变得非常简单。
| 类型 | 类别 | 选项 | 自定义能力 |
|---|---|---|---|
| 默认节点 | 内置 | 标签、图标、连接点 | 样式属性、CSS 变量 |
| 输入节点 | 内置 | 单一目标连接点 | 样式、大小、颜色 |
| 输出节点 | 内置 | 单一来源连接点 | 样式、大小、颜色 |
| 自定义节点 | 用户定义 | 任何 Vue 3 组件 | 完全控制渲染 |
| 贝塞尔边线 | 内置 | 动画、标签、标记 | 路径、颜色、宽度 |
| 阶梯边线 | 内置 | 直角路径 | 样式、动画 |
| 平滑阶梯 | 内置 | 圆角直角路径 | 样式、动画 |
| 直线边线 | 内置 | 直线 | 样式、动画 |
自定义节点是标准的 Vue 3 组件,接收节点数据作为 props,可以包含任何 HTML、子组件或交互式元素。自定义边线遵循相同的模式,可以访问源和目标节点的位置。
Vue Flow 公开哪些交互事件?
该库提供了一个全面的事件系统,涵盖每个用户交互和状态变更。
| 事件 | 触发时机 | 承载数据 |
|---|---|---|
nodeClick | 用户点击节点 | 节点 ID、事件、位置 |
nodeDrag | 用户拖拽节点 | 节点 ID、位置增量 |
edgeClick | 用户点击边线 | 边线 ID、事件 |
connect | 用户创建边线 | 源节点、目标节点 |
selectionChange | 选中的节点/边线变更 | 选中 ID 数组 |
viewportChange | 缩放或平移变更 | 缩放级别、中心位置 |
nodeDoubleClick | 用户双击节点 | 节点 ID、事件 |
nodesChange | 任何节点变更 | 变更类型和数据 |
edgesChange | 任何边线变更 | 变更类型和数据 |
事件遵循 Vue 3 的 emit 模式,可以在模板中使用标准的 @event 语法处理。事件承载数据以 TypeScript 类型化,使与类型安全代码库的集成变得简单直接。
如何在 Vue Flow 中创建自定义节点?
创建自定义节点是 Vue Flow 应用程序中最常见的扩展点,而该库使其非常简单。
| 自定义方面 | Vue Flow 方法 | 示例 |
|---|---|---|
| 节点渲染 | 自定义 Vue 3 组件 | 包含任何 HTML 的 <template> |
| 节点数据 | 类型化 props 接口 | defineProps<NodeProps>() |
| 节点连接点 | <Handle /> 组件 | 位置、类型、样式 |
| 节点连接 | 可配置的连接点类型 | 源/目标、多个连接点 |
| 节点调整大小 | 调整大小指令 | 拖拽调整节点大小 |
| 节点右键菜单 | 自定义实现 | 右键组件 |
| 节点分组 | 嵌套节点支持 | 父-子节点 |
| 节点验证 | 连接前回调 | 拒绝无效连接 |
自定义节点本质上是一个标准的 Vue 3 组件,接收节点特定的 props,并可以使用 Handle 组件来定义连接点。这个熟悉的模式意味着任何 Vue 开发者都可以创建复杂的自定义节点,而无需学习新的范式。
FAQ
什么是 Vue Flow? Vue Flow 是一个为 Vue 3 设计的高度可自定义流程图组件库,灵感来自 React Flow。它提供缩放、平移、小地图、自定义节点和边线,以及完整的 TypeScript 支持,用于构建交互式基于节点的应用程序。
Vue Flow 与 React Flow 相比如何? Vue Flow 的灵感来自 React Flow,但它是为 Vue 3 的 Composition API 完全重新实现的。它提供类似的功能——自定义节点、边线、小地图、控件——并针对 Vue 的响应式系统进行了性能优化。
Vue Flow 支持哪些类型的节点和边线? Vue Flow 支持内置节点类型,包括输入、输出和默认节点。自定义节点可以创建为 Vue 3 组件。边线类型包括贝塞尔曲线、阶梯、平滑阶梯和直线,全部支持自定义样式和标记。
Vue Flow 支持触摸设备和移动设备吗? 是的,Vue Flow 包含移动设备的触摸事件处理。用户可以在平板和手机上使用触摸手势拖拽节点、平移视口和缩放。
可以使用 Vue Flow 创建哪些类型的应用程序? Vue Flow 用于可视化编程编辑器、工作流程自动化工具、聊天机器人构建器、数据管道设计器、思维导图应用程序、网络拓扑编辑器,以及任何需要交互式基于节点界面的应用程序。
延伸阅读
- Vue Flow GitHub 仓库 – 源代码、示例和社区问题
- Vue Flow 文档 – 附指南和 API 参考的官方文档
- React Flow – Vue Flow 的灵感来源(React 版本)
- Vue 3 Composition API 文档 – Vue Flow 所基于的 Vue 3 API
- TypeScript 文档 – 用于类型安全 Vue Flow 使用的 TypeScript 语言参考
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!