react-best-practices
React performance optimization guidelines. Use when writing, reviewing, or refactoring React components, hooks, effects, data fetching, or bundle optimization. Includes useEffect best practices — when NOT to use effects and better alternatives. Triggers: "when writing React code", "reviewing a React PR", "why is this component re-rendering", "reviewing code for performance issues", "optimizing bundle size".
How do I install this agent skill?
npx skills add https://github.com/poteto/noodle --skill react-best-practicesIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill provides educational guidelines and code examples for React performance optimization. It contains no malicious code, obfuscation, or data exfiltration patterns.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerpass
49 files scanned · No issues
What does this agent skill do?
React Best Practices
Performance optimization guide for client-side React applications. Contains 47 rules across 8 categories, prioritized by impact. Adapted from Vercel Engineering's guidelines, filtered for client-only React + Vite (no Next.js / SSR).
When to Apply
Reference these guidelines when:
- Writing new React components or hooks
- Reviewing code for performance issues
- Refactoring existing React code
- Optimizing bundle size or render performance
- Writing or reviewing
useEffectusage
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Eliminating Waterfalls | CRITICAL | async- |
| 2 | Bundle Size Optimization | CRITICAL | bundle- |
| 3 | Client-Side Data Fetching | MEDIUM-HIGH | client- |
| 4 | Re-render Optimization | MEDIUM | rerender- |
| 5 | useEffect Patterns | MEDIUM | useeffect- |
| 6 | Rendering Performance | MEDIUM | rendering- |
| 7 | JavaScript Performance | LOW-MEDIUM | js- |
| 8 | Advanced Patterns | LOW | advanced- |
Quick Reference
1. Eliminating Waterfalls (CRITICAL)
async-defer-await— Move await into branches where actually usedasync-parallel— Use Promise.all() for independent operationsasync-dependencies— Use promise chaining for partial dependenciesasync-api-routes— Start promises early, await late
2. Bundle Size Optimization (CRITICAL)
bundle-barrel-imports— Import directly, avoid barrel filesbundle-conditional— Load modules only when feature is activatedbundle-defer-third-party— Load analytics/logging after mountbundle-preload— Preload on hover/focus for perceived speed
3. Client-Side Data Fetching (MEDIUM-HIGH)
client-event-listeners— Deduplicate global event listenersclient-passive-event-listeners— Use passive listeners for scroll/touchclient-swr-dedup— Use SWR for automatic request deduplicationclient-localstorage-schema— Version and minimize localStorage data
4. Re-render Optimization (MEDIUM)
rerender-derived-state-no-effect— Derive state during render, not effectsrerender-defer-reads— Don't subscribe to state only used in callbacksrerender-simple-expression-in-memo— Avoid memo for simple primitivesrerender-memo-with-default-value— Hoist default non-primitive propsrerender-memo— Extract expensive work into memoized componentsrerender-dependencies— Use primitive dependencies in effectsrerender-move-effect-to-event— Put interaction logic in event handlersrerender-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 updatesrerender-use-ref-transient-values— Use refs for transient frequent values
5. useEffect Patterns (MEDIUM)
useeffect-anti-patterns— Common mistakes: derived state in effects, effect chains, notifying parentsuseeffect-alternatives— Decision tree and alternatives: derived state, key prop, event handlers, useSyncExternalStore
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-svg-precision— Reduce SVG coordinate precisionrendering-conditional-render— Use ternary, not && for conditionalsrendering-usetransition-loading— Prefer useTransition for loading state
7. JavaScript Performance (LOW-MEDIUM)
js-batch-dom-css— Batch DOM reads/writes to avoid layout thrashingjs-index-maps— Build Map for repeated lookupsjs-cache-property-access— Cache object properties in loopsjs-cache-function-results— Cache function results in module-level Mapjs-cache-storage— Cache localStorage/sessionStorage readsjs-combine-iterations— Combine multiple filter/map into one loopjs-length-check-first— Check array length before expensive comparisonjs-early-exit— Return early from functionsjs-hoist-regexp— Hoist RegExp creation outside loopsjs-min-max-loop— Use loop for min/max instead of sortjs-set-map-lookups— Use Set/Map for O(1) lookupsjs-tosorted-immutable— Use toSorted() for immutability
8. Advanced Patterns (LOW)
advanced-init-once— Initialize app once per app loadadvanced-event-handler-refs— Store event handlers in refsadvanced-use-latest— useEffectEvent for stable callback refs
How to Use
Read individual reference files for detailed explanations and code examples:
references/async-parallel.md
references/rerender-derived-state-no-effect.md
references/useeffect-anti-patterns.md
Each reference file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/poteto/noodle/react-best-practices">View react-best-practices on skillZs</a>