返回顶部
r

react-flow-code-review

Reviews React Flow code for anti-patterns, performance issues, and best practices. Use when reviewing code that uses @xyflow/react, checking for common mistakes, or optimizing node-based UI implementations.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.1.0
安全检测
已通过
83
下载量
0
收藏
概述
安装方式
版本历史

react-flow-code-review

# React Flow Code Review ## Critical Anti-Patterns ### 1. Defining nodeTypes/edgeTypes Inside Components **Problem**: Causes all nodes to re-mount on every render. ```tsx // BAD - recreates object every render function Flow() { const nodeTypes = { custom: CustomNode }; // WRONG return <ReactFlow nodeTypes={nodeTypes} />; } // GOOD - defined outside component const nodeTypes = { custom: CustomNode }; function Flow() { return <ReactFlow nodeTypes={nodeTypes} />; } // GOOD - useMemo if dynamic function Flow() { const nodeTypes = useMemo(() => ({ custom: CustomNode }), []); return <ReactFlow nodeTypes={nodeTypes} />; } ``` ### 2. Missing memo() on Custom Nodes/Edges **Problem**: Custom components re-render on every parent update. ```tsx // BAD - no memoization function CustomNode({ data }: NodeProps) { return <div>{data.label}</div>; } // GOOD - wrapped in memo import { memo } from 'react'; const CustomNode = memo(function CustomNode({ data }: NodeProps) { return <div>{data.label}</div>; }); ``` ### 3. Inline Callbacks Without useCallback **Problem**: Creates new function references, breaking memoization. ```tsx // BAD - inline callback <ReactFlow onNodesChange={(changes) => setNodes(applyNodeChanges(changes, nodes))} /> // GOOD - memoized callback const onNodesChange = useCallback( (changes) => setNodes((nds) => applyNodeChanges(changes, nds)), [] ); <ReactFlow onNodesChange={onNodesChange} /> ``` ### 4. Using useReactFlow Outside Provider ```tsx // BAD - will throw error function App() { const { getNodes } = useReactFlow(); // ERROR: No provider return <ReactFlow ... />; } // GOOD - wrap in provider function FlowContent() { const { getNodes } = useReactFlow(); // Works return <ReactFlow ... />; } function App() { return ( <ReactFlowProvider> <FlowContent /> </ReactFlowProvider> ); } ``` ### 5. Storing Complex Objects in Node Data **Problem**: Reference equality checks fail, causing unnecessary updates. ```tsx // BAD - new object reference every time setNodes(nodes.map(n => ({ ...n, data: { ...n.data, config: { nested: 'value' } } // New object each time }))); // GOOD - use updateNodeData for targeted updates const { updateNodeData } = useReactFlow(); updateNodeData(nodeId, { config: { nested: 'value' } }); ``` ## Performance Checklist ### Node Rendering - [ ] Custom nodes wrapped in `memo()` - [ ] nodeTypes defined outside component or memoized - [ ] Heavy computations inside nodes use `useMemo` - [ ] Event handlers use `useCallback` ### Edge Rendering - [ ] Custom edges wrapped in `memo()` - [ ] edgeTypes defined outside component or memoized - [ ] Edge path calculations are not duplicated ### State Updates - [ ] Using functional form of setState: `setNodes((nds) => ...)` - [ ] Not spreading entire state for single property updates - [ ] Using `updateNodeData` for data-only changes - [ ] Batch updates when adding multiple nodes/edges ### Viewport - [ ] Not calling `fitView()` on every render - [ ] Using `fitViewOptions` for initial fit only - [ ] Animation durations are reasonable (< 500ms) ## Common Mistakes ### Missing Container Height ```tsx // BAD - no height, flow won't render <ReactFlow nodes={nodes} edges={edges} /> // GOOD - explicit dimensions <div style={{ width: '100%', height: '100vh' }}> <ReactFlow nodes={nodes} edges={edges} /> </div> ``` ### Missing CSS Import ```tsx // Required for default styles import '@xyflow/react/dist/style.css'; ``` ### Forgetting nodrag on Interactive Elements ```tsx // BAD - clicking button drags node <button onClick={handleClick}>Click</button> // GOOD - prevents drag <button className="nodrag" onClick={handleClick}>Click</button> ``` ### Not Using Position Constants ```tsx // BAD - string literals <Handle type="source" position="right" /> // GOOD - type-safe constants import { Position } from '@xyflow/react'; <Handle type="source" position={Position.Right} /> ``` ### Mutating Nodes/Edges Directly ```tsx // BAD - direct mutation nodes[0].position = { x: 100, y: 100 }; setNodes(nodes); // GOOD - immutable update setNodes(nodes.map(n => n.id === '1' ? { ...n, position: { x: 100, y: 100 } } : n )); ``` ## TypeScript Issues ### Missing Generic Types ```tsx // BAD - loses type safety const [nodes, setNodes] = useNodesState(initialNodes); // GOOD - explicit types type MyNode = Node<{ value: number }, 'custom'>; const [nodes, setNodes] = useNodesState<MyNode>(initialNodes); ``` ### Wrong Props Type ```tsx // BAD - using wrong type function CustomNode(props: any) { ... } // GOOD - correct props type function CustomNode(props: NodeProps<MyNode>) { ... } ``` ## Review Questions 1. Are all custom components memoized? 2. Are nodeTypes/edgeTypes defined outside render? 3. Are callbacks wrapped in useCallback? 4. Is the container sized properly? 5. Are styles imported? 6. Is useReactFlow used inside a provider? 7. Are interactive elements marked with nodrag? 8. Are types used consistently throughout?

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 react-flow-code-review-1775978101 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 react-flow-code-review-1775978101 技能

通过命令行安装

skillhub install react-flow-code-review-1775978101

下载 Zip 包

⬇ 下载 react-flow-code-review v1.1.0

文件大小: 2.67 KB | 发布时间: 2026-4-13 11:44

v1.1.0 最新 2026-4-13 11:44
- Added comprehensive best practices guide for reviewing React Flow code, focusing on anti-patterns, performance, and common mistakes.
- Lists critical anti-patterns such as improper memoization, callback usage, and misuse of providers.
- Includes checklists for node/edge rendering, state updates, and viewport handling.
- Addresses common integration errors like missing container height, required CSS, and proper event handling.
- Highlights TypeScript tips for improved type safety with custom nodes and components.
- Provides review questions to ensure code quality and consistency.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部