Browse Source

perf: replace useViewport with narrow useStore selector in GroupControlsOverlay

useViewport() re-renders on every pan AND zoom. The narrow selector
useStore((s) => s.transform[2]) only fires when zoom changes, eliminating
unnecessary group overlay re-renders during panning.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 4 months ago
parent
commit
c2ee875084
  1. 4
      src/components/GroupsOverlay.tsx

4
src/components/GroupsOverlay.tsx

@ -1,7 +1,7 @@
"use client";
import { useCallback, useState, useRef, useEffect } from "react";
import { useViewport, ViewportPortal } from "@xyflow/react";
import { useStore, ViewportPortal } from "@xyflow/react";
import { useWorkflowStore, GROUP_COLORS } from "@/store/workflowStore";
import { GroupColor } from "@/types";
@ -492,7 +492,7 @@ export function GroupBackgroundsPortal() {
// Renders group controls (headers, resize handles) using ViewportPortal above nodes
export function GroupControlsOverlay() {
const { groups } = useWorkflowStore();
const { zoom } = useViewport();
const zoom = useStore((s) => s.transform[2]);
const groupIds = Object.keys(groups);

Loading…
Cancel
Save