xyflow 核心架构概述
xyflow 是 React Flow / Svelte Flow 的 monorepo:框架无关逻辑在 @xyflow/system,React 绑定在 @xyflow/react(包名随版本可能为 reactflow)。
1. 包分工
| 包 | 职责 |
|---|---|
| system | 平移缩放(d3-zoom)、拖拽(d3-drag)、连线、路径算法、变更应用 |
| react | 组件树、Zustand store、与 React 生命周期绑定 |
| svelte | 同等能力的 Svelte 绑定 |
为何拆 system:双框架复用、核心可单测、发布可独立版本。
2. React 侧组件层次(概念)
text
ReactFlow(props、Provider、样式)
→ Wrapper(创建 store、受控同步)
→ GraphView(节点/边/视口组合)
→ ZoomPane(viewport 变换)
→ Pane(画布事件)
→ Viewport
→ EdgeRenderer / NodeRenderer / ConnectionLine各层只做一件事:数据在 store,变换在 viewport,绘制在 Renderer。
3. 核心数据
| 数据 | 说明 |
|---|---|
| nodes / edges | 图元列表;受控时常 onNodesChange + applyNodeChanges |
| viewport | { x, y, zoom } 画布变换 |
| nodeTypes / edgeTypes | 自定义渲染组件映射 |
4. 与 Zustand / React 的关系
- 每个
ReactFlow实例一个 store(ReactFlowProvider隔离多实例)。 - 组件通过 selector 订阅片段;见 02-状态管理。
5. 阅读路径
| 主题 | 章节 |
|---|---|
| store 结构 | 02 |
| 渲染 | 03 |
| 拖拽/连线 | 04、06 |
| v12 拆包 | 07 |
总结
xyflow = system 算几何与交互 + React 层管状态与渲染;读源码先 packages/system 再 packages/react/src/store。