Professional React (web) development: component design, hooks and performance, UI/a11y, and framework edge cases (Vite, Next.js, SSR). Use this skill when the user works on React, JSX/TSX, hooks (useState, useEffect, useMemo, useCallback, useRef, useReducer, useContext, useLayoutEffect), Server Components (Next/App Router), client boundaries, React Router / TanStack Router, TanStack Query, Zustand/Redux, forms (React Hook Form), testing (Vitest/Jest, RTL, Playwright), bundlers (Vite, webpack), or asks for review of effects, memoization, lists/keys, hydration, or bundle size. Triggers: "React", "JSX", "TSX", "hooks", "useEffect", "useMemo", "useCallback", "useRef", "memo", "React.memo", "re-render", "Strict Mode", "hydration", "SSR", "RSC", "Server Component", "use client", "Next.js", "Vite", "React Router", "TanStack Query", "React Hook Form", "forwardRef", "lazy", "Suspense", "Error Boundary", "key prop", "Virtual DOM", "flushSync", "a11y", "ARIA", "semantic HTML".
Use official React docs for API truth; this skill encodes professional defaults, UI and accessibility habits, and edge-case awareness (effects, hydration, concurrent React). Confirm React major version, framework (CRA/Vite/Next/Remix), and SSR vs SPA when known.
React, useEffect, hydration, RSC, use client, TanStack Query, a11y, …references/ when you need depth.useEffect; prefer event handlers or derived state during render when possible.memo / selectors after measuring; avoid premature optimization."use client" change where hooks and browser APIs run.button, nav, main, headings) before ARIA; add ARIA when semantics are insufficient.Details: references/ui-ux-design.md
key on lists — stable identity; avoid index keys for reorderable or mutable lists.forwardRef when parents must measure or focus wrapped components.Details: references/components-and-jsx.md
react-hooks/exhaustive-deps as aid, not oracle.useMemo for expensive pure computation; useCallback when passing callbacks to memoized children; profile first.React.lazy + Suspense for route-level chunks; error boundaries around lazy trees.useEffect + fetch for server state.Details: references/tips-and-tricks.md
Date, random, locale, or browser-only APIs during SSR.flushSync sparingly).setState(s => …) and correct effect deps.Details: references/edge-cases.md
references/ — topic deep-dives; do not paste entire reference docs into SKILL.md.| Topic | File |
|---|---|
| Components and JSX | references/components-and-jsx.md |
| UI / UX and semantics | references/ui-ux-design.md |
| Tips and patterns | references/tips-and-tricks.md |
| Edge cases | references/edge-cases.md |
Input: Hydration mismatch warning when rendering new Date().toLocaleString() in a server-rendered page.
Expected output: Explain client vs server output; use useEffect + state, or suppressHydrationWarning with a justified reason, plus a snippet.
useEffect or dynamic import.