--- name: react-flow-architect description: "Build production-ready ReactFlow applications with hierarchical navigation, performance optimization, and advanced state management." risk: critical source: community date_added: "2026-02-27" --- # ReactFlow Architect Build production-ready ReactFlow applications with hierarchical navigation, performance optimization, and advanced state management. ## Detailed Guide Read [the detailed guide](references/detailed-guide.md) before executing this skill. It retains the complete procedure and reference material. Treat its safety, prerequisites, and validation requirements as mandatory. For focused work, load the relevant sections; for end-to-end work, read the guide completely. ## Complete Example ```typescript import React, { useState, useCallback, useMemo, useRef } from 'react'; import ReactFlow, { Node, Edge, useReactFlow } from 'reactflow'; import dagre from 'dagre'; import { debounce } from 'lodash'; interface GraphState { nodes: Node[]; edges: Edge[]; selectedNodeId: string | null; expandedNodeIds: Set; history: GraphState[]; historyIndex: number; } export default function InteractiveGraph() { const [state, setState] = useState({ nodes: [], edges: [], selectedNodeId: null, expandedNodeIds: new Set(), history: [], historyIndex: 0, }); const { fitView } = useReactFlow(); const layoutCacheRef = useRef>(new Map()); // Memoized styled edges const styledEdges = useMemo(() => { return state.edges.map(edge => ({ ...edge, style: { ...edge.style, strokeWidth: state.selectedNodeId === edge.source || state.selectedNodeId === edge.target ? 3 : 2, stroke: state.selectedNodeId === edge.source || state.selectedNodeId === edge.target ? '#3b82f6' : '#94a3b8', }, animated: state.selectedNodeId === edge.source || state.selectedNodeId === edge.target, })); }, [state.edges, state.selectedNodeId]); // Debounced layout calculation const debouncedLayout = useMemo( () => debounce((nodes: Node[], edges: Edge[]) => { const cacheKey = generateLayoutCacheKey(nodes, edges); if (layoutCacheRef.current.has(cacheKey)) { return layoutCacheRef.current.get(cacheKey)!; } const layouted = applyDagreLayout(nodes, edges); layoutCacheRef.current.set(cacheKey, layouted); return layouted; }, 150), [] ); const handleNodeClick = useCallback((event: React.MouseEvent, node: Node) => { setState(prev => ({ ...prev, selectedNodeId: node.id, })); }, []); const handleToggleExpand = useCallback((nodeId: string) => { setState(prev => { const newExpanded = new Set(prev.expandedNodeIds); if (newExpanded.has(nodeId)) { newExpanded.delete(nodeId); } else { newExpanded.add(nodeId); } return { ...prev, expandedNodeIds: newExpanded, }; }); }, []); return ( ); } ``` This comprehensive skill provides everything needed to build production-ready ReactFlow applications with hierarchical navigation, performance optimization, and advanced state management patterns. ## When to Use This skill is applicable to execute the workflow or actions described in the overview. ## Limitations - Use this skill only when the task clearly matches the scope described above. - Do not treat the output as a substitute for environment-specific validation, testing, or expert review. - Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.