programming-react · git:20260421.c6cba73 · 2026-04-21 · sha256 c81fe1ea2e33a8ae
programming-react git:20260421.c6cba73A
Immutable. This exact content is served forever at /api/v1/blob/c81fe1ea2e33a8ae.
--- name: programming-react title: "React Development" description: "React hooks, component patterns, state management, TypeScript integration, and modern React 18/19 best practices. Auto-activates in React projects." license: Apache-2.0 compatibility: "Requires Node.js and npm/pnpm." capabilities: programming-nodejs domains: developer rules: - grep(react, package.json) - grep(@types/react, package.json) - content(react) --- # React Development ## Conventions - Hooks-first — functional components + hooks only, no class components - TypeScript by default — all components typed with proper prop interfaces - Composition over inheritance — small, focused components - Colocation — keep state close to where it's used - Server Components first (Next.js/React 19) — client components only for interactivity ## Component Structure - One component per file - Named exports preferred over default exports - Props interface defined above the component - Keep components small (single responsibility) - Composition with `children`/render props over prop drilling ## Hooks - `useState` — local UI state only - `useReducer` — complex state with multiple sub-values - `useEffect` — sync with external systems only (not for derived state) - `useMemo` / `useCallback` — only when profiling shows real perf problem - `useRef` — DOM refs and mutable non-reactive values - Custom hooks — prefix with `use`, extract reusable logic - Never call hooks conditionally or inside loops ## State Management - Local state first (`useState`/`useReducer`) - Context for low-frequency shared state (theme, auth) - Zustand / Jotai for client-side global state - React Query / SWR for server state - Avoid prop drilling beyond 2 levels ## Performance - `React.memo` — for components that receive stable props but re-render often - Key prop — stable, unique keys in lists (never index for dynamic lists) - Code splitting — `React.lazy` + `Suspense` for route-level splitting - Avoid anonymous functions in JSX for frequently rendered components ## Testing - Vitest + React Testing Library for components - Test behavior, not implementation (query by role/text) - Playwright for end-to-end tests - MSW for mocking HTTP at network level ## Next.js (App Router) - Server Components by default — `"use client"` only when needed - Server Actions for mutations - Metadata API for SEO - Image/Link components for optimization ## Tooling | Command | Purpose | |---------|---------| | `npm run dev` | Start dev server | | `npm run build` | Production build | | `npx tsc --noEmit` | Type check | | `npm test` | Run tests | | `npx eslint .` | Lint |