Building canvas graphics or interactive data visualizers in React frequently leads to subtle performance bugs. Common mistakes include listening directly to `window.onresize` (which fires hundreds of times per second and ignores parent container bounds) or failing to account for window.devicePixelRatio.
1400 font-semibold">import { useState, useEffect, RefObject } 400 font-semibold">from 400 font-semibold">class="text-emerald-300">"react";23400 font-semibold">export 400 font-semibold">function 300 font-medium">useContainerSize(containerRef: RefObject<HTMLElement>) {4 400 font-semibold">const [size, setSize] = 300 font-medium">useState({ width: 0, height: 0 });56 300 font-medium">useEffect(() => {7 400 font-semibold">const el = containerRef.current;8 400 font-semibold">if (!el) 400 font-semibold">return;910 400 font-semibold">let timer: ReturnType<typeof setTimeout>;1112 400 font-semibold">const observer = 400 font-semibold">new 300 font-medium">ResizeObserver((entries) => {13 400 font-semibold">if (!entries[0]) 400 font-semibold">return;14 400 font-semibold">const { width, height } = entries[0].contentRect;1516 300 font-medium">clearTimeout(timer);17 timer = 300 font-medium">setTimeout(() => {18 300 font-medium">setSize({ width: Math.300 font-medium">floor(width), height: Math.300 font-medium">floor(height) });19 }, 16);20 });2122 observer.300 font-medium">observe(el);23 400 font-semibold">return () => {24 300 font-medium">clearTimeout(timer);25 observer.300 font-medium">disconnect();26 };27 }, [containerRef]);2829 400 font-semibold">return size;30}DPI Scaling Golden Rule
Multiply your canvas `.width` and `.height` attributes by `window.devicePixelRatio`, while setting `.style.width` and `.style.height` to CSS pixels. This eliminates pixelated canvas rendering on 4K & Retina displays.
React Performance Optimization: Profiling, Rerender Elimination, & Virtualization
Practical techniques to fix laggy React web apps: avoiding primitive useEffect dependency traps, using useSyncExternalStore, virtualizing large lists, and profile-guided tuning.
Final-Year CS Student & Full-Stack / AI Developer
Engineering a High-Performance Developer Portfolio: TanStack Router, Tailwind CSS v4, & Motion
How I designed and engineered this portfolio: layout animation system, dark mode token architecture, custom command palette (Cmd+K), and zero-layout-shift routing.
Final-Year CS Student & Full-Stack / AI Developer
