3.7 KiB
3.7 KiB
name, description
| name | description |
|---|---|
| ck-react-best-practices | React and Next.js performance optimization from Vercel Engineering. Use when writing, reviewing, or refactoring React components, data fetching, bundle optimization, or fixing performance issues. |
React Best Practices (Vercel)
45 prioritized rules across 8 categories for React and Next.js performance.
When to Use
- Writing new React components or Next.js pages
- Implementing data fetching (client or server-side)
- Reviewing code for performance issues
- Optimizing bundle size or load times
- Refactoring existing React/Next.js code
Don't Use When
- Working with non-React frameworks (Vue, Svelte, Angular)
- Pure Node.js backend code without React
Rules by Priority
1. Eliminating Waterfalls (CRITICAL)
async-defer-await— move await into branches where actually usedasync-parallel— use Promise.all() for independent operationsasync-dependencies— use better-all for partial dependenciesasync-api-routes— start promises early, await lateasync-suspense-boundaries— use Suspense to stream content
2. Bundle Size (CRITICAL)
bundle-barrel-imports— import directly, avoid barrel filesbundle-dynamic-imports— use next/dynamic for heavy componentsbundle-defer-third-party— load analytics after hydrationbundle-conditional— load modules only when feature activatedbundle-preload— preload on hover/focus for perceived speed
3. Server-Side Performance (HIGH)
server-cache-react— use React.cache() for per-request dedupserver-cache-lru— use LRU cache for cross-request cachingserver-serialization— minimize data passed to client componentsserver-parallel-fetching— restructure components to parallelizeserver-after-nonblocking— use after() for non-blocking ops
4. Client-Side Data Fetching (MEDIUM-HIGH)
client-swr-dedup— use SWR for automatic request deduplicationclient-event-listeners— deduplicate global event listeners
5. Re-render Optimization (MEDIUM)
rerender-defer-reads— don't subscribe to state only used in callbacksrerender-memo— extract expensive work into memoized componentsrerender-dependencies— use primitive dependencies in effectsrerender-derived-state— subscribe to derived booleans, not raw valuesrerender-functional-setstate— use functional setState for stable callbacksrerender-lazy-state-init— pass function to useState for expensive valuesrerender-transitions— use startTransition for non-urgent updates
6. Rendering Performance (MEDIUM)
rendering-animate-svg-wrapper— animate div wrapper, not SVG elementrendering-content-visibility— use content-visibility for long listsrendering-hoist-jsx— extract static JSX outside componentsrendering-hydration-no-flicker— use inline script for client-only datarendering-activity— use Activity component for show/hiderendering-conditional-render— use ternary, not && for conditionals
7. JavaScript Performance (LOW-MEDIUM)
js-batch-dom-css— group CSS changes via classes or cssTextjs-index-maps— build Map for repeated lookupsjs-cache-property-access— cache object properties in loopsjs-set-map-lookups— use Set/Map for O(1) lookupsjs-early-exit— return early from functionsjs-hoist-regexp— hoist RegExp creation outside loops
8. Advanced Patterns (LOW)
advanced-event-handler-refs— store event handlers in refsadvanced-use-latest— useLatest for stable callback refs
Full Reference
Complete guide with code examples: AGENTS.md
Individual rule files: rules/<rule-name>.md