About react-best-practices
A React performance skill for developers, organizing 29 optimization rules by category and impact across bundles, rendering, async work, and browser behavior.
Key features
- 0129 rules grouped by category and impact
- 02Bundle size optimization guidance
- 03Re-render prevention patterns
- 04Rendering and async recommendations
- 05JavaScript and browser practices
Use cases
- 01Investigating component re-render issues
- 02Reducing bundle size
- 03Reviewing useEffect and useMemo patterns
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ redpanda-data/ console --skill react-best-practicesAfter installing, type/react-best-practicesin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
rules/advanced-event-handler-refs.mdadvanced-use-latest.mdasync-defer-await.mdasync-dependencies.mdasync-suspense-boundaries.mdbundle-barrel-imports.mdbundle-code-splitting.mdbundle-preload.mdclient-event-listeners.mdclient-passive-event-listeners.mdjs-batch-dom-css.mdjs-caching-patterns.mdjs-index-maps.mdjs-length-check-first.mdjs-tosorted-immutable.mdrendering-activity.mdrendering-animate-svg-wrapper.mdrendering-conditional-render.mdrendering-content-visibility.mdrendering-hoist-jsx.mdrendering-svg-precision.mdrerender-defer-reads.mdrerender-dependencies.mdrerender-derived-state.mdrerender-functional-setstate.mdrerender-lazy-state-init.mdrerender-memo.mdrerender-simple-expression-in-memo.mdrerender-transitions.mduse-effect.mdDetails
From the project READMEReact Best Practices
Client-side React optimization patterns for Cloud UI. 29 rules organized by category and impact.
Activation Conditions
- Performance optimization tasks
- Component re-render issues
- Bundle size concerns
- useEffect/useMemo patterns
Rules by Category
Bundle Optimization (CRITICAL)
| 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 |
Re-render Prevention (HIGH)
| 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 |
Rendering (MEDIUM)
| 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 |
Async (MEDIUM)
| 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 |
JavaScript (MEDIUM)
| 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).
Browser (MEDIUM)
| Rule | Key Point |
|---|---|
client-event-listeners | Clean up event listeners in useEffect return |
client-passive-event-listeners | { passive: true } for scroll/touch handlers |
Advanced (LOW)
| 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 |
Comments
Markdown supported