SuperAPI AI Directory

react-flow-architect

Frontend & websites

View repository

Updated 10-15 23:24

About this skill

ReactFlow Architect

Build production-ready ReactFlow applications with hierarchical navigation, performance optimization, and advanced state management.

Detailed Guide

Read the detailed guide 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

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<Map<string, Node[]>>(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.