Skip to main content

react-flow

用于基于 @xyflow/react(React Flow v12)构建节点图、工作流编辑器和交互式流程图;当用户提到 ReactFlow、@xyflow/react、节点图、流程图、DAG、工作流 UI、自定义节点/边、Handle、NodeProps、EdgeProps、useReactFlow、fitView、MiniMap、Controls 时使用。不用于纯 SVG 绘图、Canvas 图表或与 React Flow 无关的图表库(ECharts、D3、Chart.js 等)。

Aller à l'installation

Informations de source

Dépôt
SnowBeatRain/skills
Dernière activité de la source
25 mai 2026 à 13:31
Langue détectée de SKILL.md
chinois
Étoiles
2
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
20 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
react-flow
description
用于基于 @xyflow/react(React Flow v12)构建节点图、工作流编辑器和交互式流程图;当用户提到 ReactFlow、@xyflow/react、节点图、流程图、DAG、工作流 UI、自定义节点/边、Handle、NodeProps、EdgeProps、useReactFlow、fitView、MiniMap、Controls 时使用。不用于纯 SVG 绘图、Canvas 图表或与 React Flow 无关的图表库(ECharts、D3、Chart.js 等)。
# React Flow Skill ## Agent 行为契约(始终遵守) 1. **只从 `@xyflow/react` 导入**——从不使用旧版 `reactflow` 或 `react-flow-renderer`。 2. **CSS 必须引入**:`import '@xyflow/react/dist/style.css'`(Tailwind 项目用 `base.css`)。 3. **父容器必须有明确宽高**——空白画布的第一排查原因。 4. **`nodeTypes` / `edgeTypes` 在组件外定义或 `useMemo`**——组件内定义会造成每渲染卸载重挂载。 5. **优先使用自定义节点**——React Flow 官方也推荐此做法,不推荐纯靠内置节点。 6. **节点内可交互元素加 `nodrag`**——防止 input/button 触发节点拖拽。 7. **节点内滚动容器加 `nowheel`**——防止滚轮被画布缩放劫持。 8. **隐藏 Handle 用 `opacity:0` 或 `visibility:hidden`,不用 `display:none`**——`display:none` 破坏位置计算,导致边错位。 9. **同一节点多个同类型 Handle 必须加唯一 `id`**。 10. **动态增减 Handle 后调用 `useUpdateNodeInternals`**——在渲染后调用(`requestAnimationFrame`)。 11. **state 更新必须不可变**——始终展开创建新对象,mutation 不被检测。 12. **受控流连线三件套**:`onNodesChange`、`onEdgesChange`、`onConnect` 必须全部挂载。 --- ## 快速分诊(First 60s) **先确认版本**:`@xyflow/react`(v12)还是旧版 `reactflow`(v11)? **快速收集信息**: - TypeScript 还是 JavaScript? - 状态管理:本地 state / Zustand / Redux? - 预期节点数量(影响性能策略)? - 样式方案:CSS / Tailwind / styled-components? - 是否 SSR(Next.js、Remix)? **按症状路由**: | 症状 | 原因 | 处理 | |------|------|------| | 空白画布无报错 | 父容器无高度 | 设置 `height: 100vh` 或等效 | | 节点渲染但样式错乱 | 未引入 CSS | 加 `import '@xyflow/react/dist/style.css'` | | 边不显示 | 无 Handle / CSS 未引入 / Handle 用了 `display:none` | 检查三者 | | 拖拽后节点回弹 | `onNodesChange` 未连接或未 apply changes | 检查 handler | | 连线划出但无边生成 | `onConnect` 未连接 | 添加 `onConnect` handler | | `nodeTypes` 警告 + 重挂载 | `nodeTypes` 在组件内定义 | 移到组件外 | | Zustand context 报错 | 同时安装了两个版本 / 缺少 Provider | 移除旧包或添加 Provider | | 子节点渲染在父节点后面 | nodes 数组中父节点未在子节点前 | 排序:父节点先于子节点 | | 从 v11 迁移后类型错误 | 泛型 API 变更 | 读 `references/migration.md` | | 需要测试 | Playwright E2E | 读 `references/e2e-testing.md` | --- ## 意图 帮助 Agent 独立完成基于 `@xyflow/react`(React Flow v12)的节点图 UI 工程:初始化配置、自定义节点与边、Handle 连接、视口控制、状态管理、事件处理、布局算法、性能优化、TypeScript 类型安全、E2E 测试和常见交互模式。 本 skill **只负责 React Flow 图层本身**。样式系统(Tailwind、CSS Modules)、状态库(Zustand、Redux)、路由、服务端渲染等由用户另行指定;本 skill 不主动耦合其他 skill。 --- ## 触发场景 - 构建流程图、DAG、Pipeline 编辑器、思维导图、网络拓扑图、白板类应用。 - 自定义节点(`NodeProps<T>`)、自定义边(`EdgeProps<T>`)、多 Handle、动态 Handle。 - 连接验证(`isValidConnection`)、连接事件、边重连(`onReconnect`)。 - 视口控制:`fitView`、`zoomIn/Out`、`setCenter`、`screenToFlowPosition`。 - 状态管理:`useNodesState`、`useEdgesState`、`useReactFlow`、外部 store 集成。 - 布局:dagre、elkjs、d3-hierarchy 等算法与 React Flow 的集成。 - 性能优化:大规模节点渲染、`memo`、`nodeExtent`、懒加载。 - TypeScript:联合类型、类型守卫、泛型 hooks。 - E2E 测试:Playwright 选择器、拖拽模拟、视口断言。 - 高级模式:撤销/重做、复制/粘贴、计算流、协作编辑。 - 迁移:从 `reactflow`(v11)升级到 `@xyflow/react`(v12)。 --- ## 工作流 ### 1. 环境与版本确认 读取 `references/overview.md`、`references/migration.md`(若从 v11 迁移)。 1. 确认使用 `@xyflow/react`(v12)还是旧版 `reactflow`(v11)。 2. 确认 React 版本(v18+ 推荐)、TypeScript 版本和打包工具。 3. 确认 CSS 引入方式(全局 CSS、CSS-in-JS、Tailwind → `base.css`)。 4. 确认运行环境是否含 SSR(Next.js、Remix)——React Flow 依赖浏览器 DOM,需做动态导入处理。 ### 2. 基础图结构设计 读取 `references/core-concepts.md`、`references/state-management.md`。 1. 定义 Node 数据结构(`id`、`type`、`position`、`data`)和 Edge 结构。 2. 选择状态管理方式:受控模式(`useNodesState` + `useEdgesState`)或外部 store。 3. 明确 `nodeTypes` / `edgeTypes` map。 4. 确定初始布局:手动坐标、算法自动布局还是 `fitView` 自适应。 ### 3. TypeScript 类型设计 读取 `references/typescript.md`。 1. 定义判别联合类型 `AppNode = BuiltInNode | MyNode1 | MyNode2`。 2. 定义 `AppEdge` 类型。 3. 将泛型传给 `useReactFlow<AppNode, AppEdge>`、`<ReactFlow<AppNode, AppEdge>>`、回调类型。 4. 编写类型守卫函数。 ### 4. 自定义节点与边 按需读取 `references/custom-nodes.md`、`references/custom-edges.md`、`references/handles.md`。 1. 用 `Node<TData, TType>` 定义类型,`NodeProps<T>` 作为组件 props 类型。 2. Handle 位置、数量、`id` 命名,动态 Handle 需搭配 `useUpdateNodeInternals`。 3. 用 `Edge<TData, TType>` + `EdgeProps<T>` + path 工具函数实现自定义边。 4. 可交互元素加 `nodrag` / `nopan`;滚动容器加 `nowheel`;HTML 标签放在 `EdgeLabelRenderer` 中。 ### 5. 连接与事件 读取 `references/events.md`、`references/connections.md`。 1. `onConnect` + `addEdge`;`isValidConnection` 做前置校验;`getOutgoers` 做 DAG 校验。 2. 节点/边的点击、拖拽、右键菜单事件。 3. `onBeforeDelete` 确认删除;`onConnectEnd` 处理拖到空白处创建节点。 ### 6. 视口控制 读取 `references/viewport.md`。 1. `fitView`、`zoomIn/Out`、`setCenter`、`setViewport`。 2. 坐标转换:`screenToFlowPosition`(鼠标→流坐标)。 3. 视口持久化:`getViewport` + `setViewport` + localStorage。 ### 7. 布局算法 读取 `references/layout.md`。 1. 简单场景:dagre;复杂场景:elkjs;树形:d3-hierarchy。 2. 布局函数在 `useNodesInitialized` 后执行,完成后调用 `fitView({ duration })`。 ### 8. 性能与样式 读取 `references/performance-and-styling.md`。 1. `React.memo` 包裹节点组件;稳定 `nodeTypes` 引用。 2. CSS 变量定制主题;`colorMode` 暗色模式;Tailwind 用 `base.css`。 ### 9. 高级模式(按需) 读取 `references/advanced-patterns.md`。 - 撤销/重做:Zustand + Zundo。 - 复制/粘贴:重新生成 ID,映射边 source/target。 - 计算流:`useNodeConnections` + `useNodesData` + `updateNodeData`。 - E2E 测试:读取 `references/e2e-testing.md`。 --- ## References | 场景 | 读取 | |---|---| | 版本/安装/SSR | `references/overview.md` | | v11→v12 迁移 | `references/migration.md` | | Node/Edge/Handle 核心概念 | `references/core-concepts.md` | | TypeScript 类型系统 | `references/typescript.md` | | 状态管理 | `references/state-management.md` | | 自定义节点 | `references/custom-nodes.md` | | Handle 连接点 | `references/handles.md` | | 自定义边 | `references/custom-edges.md` | | 连接与校验 | `references/connections.md` | | 事件处理 | `references/events.md` | | 视口控制 | `references/viewport.md` | | 布局算法 | `references/layout.md` | | 性能优化与样式 | `references/performance-and-styling.md` | | 内置组件与 Hooks | `references/built-in-components.md` | | 常用模式与配方 | `references/common-recipes.md` | | 高级模式(undo/redo/computed/collab) | `references/advanced-patterns.md` | | E2E 测试(Playwright) | `references/e2e-testing.md` | | 避坑指南 | `references/pitfalls.md` | | 官方文档索引 | `references/official-docs-map.md` | --- ## 交付检查清单 - [ ] 已确认使用 `@xyflow/react` v12(非旧版 `reactflow`),API 无混用。 - [ ] 已在应用入口引入 CSS(`style.css` 或 `base.css`)。 - [ ] `nodeTypes` / `edgeTypes` 已在组件外定义或 `useMemo`,无每渲染重建。 - [ ] 父容器有明确宽高(不依赖隐式高度)。 - [ ] 自定义节点内可交互元素已添加 `nodrag`;滚动容器已添加 `nowheel`。 - [ ] 隐藏 Handle 使用 `opacity:0` 或 `visibility:hidden`,不使用 `display:none`。 - [ ] 多 Handle 场景每个 Handle 有唯一 `id`;动态 Handle 调用了 `useUpdateNodeInternals`。 - [ ] 连接校验在 `isValidConnection` 完成(含自环、重复边、DAG 校验)。 - [ ] 受控流三件套全部挂载:`onNodesChange`、`onEdgesChange`、`onConnect`。 - [ ] state 更新创建新对象(无 mutation)。 - [ ] TypeScript 项目已定义 `AppNode`/`AppEdge` 判别联合类型并传递泛型。 - [ ] SSR 场景已做动态导入处理(`next/dynamic` 或 `React.lazy`)。 - [ ] 布局算法场景已在布局完成后调用 `fitView`。 - [ ] 凡在 `<ReactFlow />` 外使用 `useReactFlow()`,已包裹 `<ReactFlowProvider>`。
Voir sur GitHub