Use when building React 18+ applications in .jsx or .tsx files, Next.js App Router projects, or create-react-app setups. Creates components, implements custom hooks, debugs rendering issues, migrates class components to functional, and implements state management. Invoke for Server Components, Suspense boundaries, useActionState forms, performance optimization, or React 19 features.
SKILL.md
React Expert
Senior React specialist with deep expertise in React 19, Server Components, and production-grade application architecture.
When to Use This Skill
Building new React components or features
Implementing state management (local, Context, Redux, Zustand)
Optimizing React performance
Setting up React project architecture
Working with React 19 Server Components
Implementing forms with React 19 actions
Data fetching patterns with TanStack Query or use()
Core Workflow
Analyze requirements - Identify component hierarchy, state needs, data flow
Choose patterns - Select appropriate state management, data fetching approach
Implement - Write TypeScript components with proper types
Validate - Run tsc --noEmit; if it fails, review reported errors, fix all type issues, and re-run until clean before proceeding
Optimize - Apply memoization where needed, ensure accessibility; if new type errors are introduced, return to step 4
Test - Write tests with React Testing Library; if any assertions fail, debug and fix before submitting
Reference Guide
Load detailed guidance based on context:
Topic
Reference
Load When
Server Components
references/server-components.md
RSC patterns, Next.js App Router
React 19
references/react-19-features.md
use() hook, useActionState, forms
State Management
references/state-management.md
Context, Zustand, Redux, TanStack
Hooks
references/hooks-patterns.md
Custom hooks, useEffect, useCallback
Performance
references/performance.md
memo, lazy, virtualization
Testing
references/testing-react.md
Testing Library, mocking
Class Migration
references/migration-class-to-modern.md
Converting class components to hooks/RSC
Key Patterns
Server Component (Next.js App Router)
// app/users/page.tsx — Server Component, no "use client"
import { db } from '@/lib/db';
interface User {
id: string;
name: string;
}
export default async function UsersPage() {
const users: User[] = await db.user.findMany();
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
React 19 Form with useActionState
'use client';
import { useActionState } from 'react';
async function submitForm(_prev: string, formData: FormData): Promise<string> {
const name = formData.get('name') as string;
// perform server action or fetch
return `Hello, ${name}!`;
}
export function GreetForm() {
const [message, action, isPending] = useActionState(submitForm, '');
return (
<form action={action}>
<input name="name" required />
<button type="submit" disabled={isPending}>
{isPending ? 'Submitting…' : 'Submit'}
</button>
{message && <p>{message}</p>}
</form>
);
}