MCPInstall

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".

Installs
226
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/poteto/noodle --skill react-best-practices
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads react-best-practices automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

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 useEffect usage

Rule Categories by Priority

PriorityCategoryImpactPrefix
1Eliminating WaterfallsCRITICALasync-
2Bundle Size OptimizationCRITICALbundle-
3Client-Side Data FetchingMEDIUM-HIGHclient-
4Re-render OptimizationMEDIUMrerender-
5useEffect PatternsMEDIUMuseeffect-
6Rendering PerformanceMEDIUMrendering-
7JavaScript PerformanceLOW-MEDIUMjs-
8Advanced PatternsLOWadvanced-

Quick Reference

1. Eliminating Waterfalls (CRITICAL)

  • async-defer-await — Move await into branches where actually used
  • async-parallel — Use Promise.all() for independent operations
  • async-dependencies — Use promise chaining for partial dependencies
  • async-api-routes — Start promises early, await late

2. Bundle Size Optimization (CRITICAL)

  • bundle-barrel-imports — Import directly, avoid barrel files
  • bundle-conditional — Load modules only when feature is activated
  • bundle-defer-third-party — Load analytics/logging after mount
  • bundle-preload — Preload on hover/focus for perceived speed

3. Client-Side Data Fetching (MEDIUM-HIGH)

  • client-event-listeners — Deduplicate global event listeners
  • client-passive-event-listeners — Use passive listeners for scroll/touch
  • client-swr-dedup — Use SWR for automatic request deduplication
  • client-localstorage-schema — Version and minimize localStorage data

4. Re-render Optimization (MEDIUM)

  • rerender-derived-state-no-effect — Derive state during render, not effects
  • rerender-defer-reads — Don't subscribe to state only used in callbacks
  • rerender-simple-expression-in-memo — Avoid memo for simple primitives
  • rerender-memo-with-default-value — Hoist default non-primitive props
  • rerender-memo — Extract expensive work into memoized components
  • rerender-dependencies — Use primitive dependencies in effects
  • rerender-move-effect-to-event — Put interaction logic in event handlers
  • rerender-derived-state — Subscribe to derived booleans, not raw values
  • rerender-functional-setstate — Use functional setState for stable callbacks
  • rerender-lazy-state-init — Pass function to useState for expensive values
  • rerender-transitions — Use startTransition for non-urgent updates
  • rerender-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 parents
  • useeffect-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 element
  • rendering-content-visibility — Use content-visibility for long lists
  • rendering-hoist-jsx — Extract static JSX outside components
  • rendering-svg-precision — Reduce SVG coordinate precision
  • rendering-conditional-render — Use ternary, not && for conditionals
  • rendering-usetransition-loading — Prefer useTransition for loading state

7. JavaScript Performance (LOW-MEDIUM)

  • js-batch-dom-css — Batch DOM reads/writes to avoid layout thrashing
  • js-index-maps — Build Map for repeated lookups
  • js-cache-property-access — Cache object properties in loops
  • js-cache-function-results — Cache function results in module-level Map
  • js-cache-storage — Cache localStorage/sessionStorage reads
  • js-combine-iterations — Combine multiple filter/map into one loop
  • js-length-check-first — Check array length before expensive comparison
  • js-early-exit — Return early from functions
  • js-hoist-regexp — Hoist RegExp creation outside loops
  • js-min-max-loop — Use loop for min/max instead of sort
  • js-set-map-lookups — Use Set/Map for O(1) lookups
  • js-tosorted-immutable — Use toSorted() for immutability

8. Advanced Patterns (LOW)

  • advanced-init-once — Initialize app once per app load
  • advanced-event-handler-refs — Store event handlers in refs
  • advanced-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

FAQ

What does the react-best-practices skill do?

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 react-best-practices?

Run npx skills add https://github.com/poteto/noodle --skill react-best-practices in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/react-best-practices/ (personal) or .claude/skills/react-best-practices/ (project).

Which AI agents can use react-best-practices?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is react-best-practices safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains react-best-practices?

It is published by poteto in poteto/noodle. It has 226 recorded installs.

More from poteto/noodle

View all →

adversarial-review

poteto/noodle

Adversarial code review using cross-model approach. Spawns reviewers on the opposing model (Claude uses Codex, Codex uses Claude) to challenge work from distinct critical lenses. Produces a synthesized verdict with findings and lead judgment. Triggers: "adversarial review".

unslop

poteto/noodle

Remove AI writing patterns from prose. Use for docs, READMEs, blog posts, any non-code text that should sound human. Triggers: "unslop", "humanize", "make this sound human", "clean up this writing", "edit for voice", "de-AI this text".

Docs & Writing907 installs

ts-best-practices

poteto/noodle

Open the skill to read its SKILL.md instructions.

debugging

poteto/noodle

Systematic root-cause debugging methodology. Use for any technical problem — errors, failures, unexpected behavior, or when stuck. Triggers: "debug", "fix this", "what's wrong", "investigate".

quality

poteto/noodle

Open the skill to read its SKILL.md instructions.

235 installs

commit

poteto/noodle

Create conventional commit messages. Use when the user says "commit this", "save changes", "git commit", asks to commit code, write a commit message, or format git history. Follows conventional commits specification.

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.