frontend/.claude/skills/react-best-practices/SKILL.md
Client-side React performance optimization patterns.
npx skillsauth add redpanda-data/console react-best-practicesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Client-side React optimization patterns for Cloud UI. 29 rules organized by category and impact.
| Rule | Key Point |
|------|-----------|
| bundle-barrel-imports | Import from source files, not barrel index.ts |
| bundle-code-splitting | React.lazy + Suspense for heavy components, conditional loads, deferred 3rd-party |
| bundle-preload | Preload critical resources |
| Rule | Key Point |
|------|-----------|
| rerender-memo | Memoize expensive computations |
| rerender-dependencies | Minimize hook dependency arrays |
| rerender-derived-state | Compute during render, not in effects |
| rerender-functional-setstate | setState(prev => ...) to avoid stale closures |
| rerender-lazy-state-init | useState(() => expensive()) not useState(expensive()) |
| rerender-simple-expression-in-memo | Don't memoize trivial expressions |
| rerender-transitions | useTransition for non-urgent updates |
| rerender-defer-reads | Read URL params / storage inside callbacks, not at render |
| Rule | Key Point |
|------|-----------|
| rendering-conditional-render | Short-circuit with && / ternary, avoid render in effects |
| rendering-hoist-jsx | Move static JSX outside components |
| rendering-content-visibility | CSS content-visibility: auto for off-screen |
| rendering-activity | React <Activity> for hidden UI |
| rendering-animate-svg-wrapper | Wrap animated SVGs to isolate re-renders |
| rendering-svg-precision | Limit SVG coordinate precision |
| Rule | Key Point |
|------|-----------|
| async-suspense-boundaries | Granular <Suspense> boundaries |
| async-defer-await | Don't await non-blocking work |
| async-dependencies | Load deps in parallel, not sequentially |
| Rule | Key Point |
|------|-----------|
| js-caching-patterns | Module-level Map caches for repeated calls + storage reads |
| js-batch-dom-css | Batch DOM reads/writes to avoid layout thrashing |
| js-index-maps | Pre-index arrays into Maps for O(1) lookups |
| js-length-check-first | Check .length before expensive operations |
| js-tosorted-immutable | Use .toSorted() / .toReversed() for immutable transforms |
RegExp hoisting is enforced by Biome (useTopLevelRegex).
| Rule | Key Point |
|------|-----------|
| client-event-listeners | Clean up event listeners in useEffect return |
| client-passive-event-listeners | { passive: true } for scroll/touch handlers |
| Rule | Key Point |
|------|-----------|
| advanced-event-handler-refs | Stable callback refs to avoid child re-renders |
| advanced-use-latest | useLatest pattern for always-current values in callbacks |
development
Review UI code for Web Interface Guidelines compliance
development
Build UI with Redpanda Registry components, Tailwind v4, and accessibility best practices.
testing
Write and maintain tests with Vitest v4 dual configuration, mock utilities, and Zustand store testing patterns.
development
Migrate React applications from React Router to TanStack Router with file-based routing. Use when user requests: (1) Router migration, (2) TanStack Router setup, (3) File-based routing implementation, (4) React Router replacement, (5) Type-safe routing, or mentions 'migrate router', 'tanstack router', 'file-based routes'.