react-19
React 19.2 Core Features
Agent Workflow (MANDATORY)
Before ANY implementation, use TeamCreate to spawn 3 agents:
- fuse-ai-pilot:explore-codebase - Analyze existing React patterns and component structure
- fuse-ai-pilot:research-expert - Verify latest React 19.2 docs via Context7/Exa
- mcp__context7__query-docs - Check use(), useOptimistic, useActionState, Activity patterns
After implementation, run fuse-ai-pilot:sniper for validation.
What's New in React 19.2
New Hooks
| Hook | Purpose | Guide |
|---|---|---|
use() |
Read promises/context in render | references/new-hooks.md |
useOptimistic |
Optimistic UI updates | references/new-hooks.md |
useActionState |
Form action state management | references/new-hooks.md |
useFormStatus |
Form pending state (child components) | references/new-hooks.md |
useEffectEvent |
Non-reactive callbacks in effects | references/new-hooks.md |
→ See references/new-hooks.md for detailed usage
Classic Hooks (React 18+)
State Hooks
| Hook | Purpose | Guide |
|---|---|---|
useState |
Local component state | references/use-state.md |
→ For global state, see react-state skill
Effect Hooks
| Hook | Purpose | Guide |
|---|---|---|
useEffect |
Side effects after paint | references/use-effect.md |
useLayoutEffect |
Sync DOM before paint | references/use-layout-effect.md |
Ref Hooks
| Hook | Purpose | Guide |
|---|---|---|
useRef |
DOM access, mutable values | references/use-ref.md |
useImperativeHandle |
Customize ref API | references/use-imperative-handle.md |
Performance Hooks (Rare with Compiler)
| Hook | Purpose | Guide |
|---|---|---|
useMemo |
Memoize expensive values | references/use-memo.md |
useCallback |
Memoize functions | references/use-callback.md |
→ React Compiler handles most memoization automatically
Other Hooks
| Hook | Purpose | Guide |
|---|---|---|
useId |
Unique IDs for accessibility | references/use-id.md |
useSyncExternalStore |
External store subscription | references/use-sync-external-store.md |
Custom Hooks
→ See references/custom-hooks-patterns.md for patterns
→ See references/templates/custom-hooks.md for implementations
Activity Component (19.2)
Hide/show components while preserving state:
<Activity mode={isActive ? 'visible' : 'hidden'}>
<TabContent />
</Activity>
→ See references/activity-component.md for patterns
React Compiler (19.1+)
Automatic memoization - useMemo/useCallback mostly obsolete:
- Build-time optimization
- No more manual memoization in most cases
- 2.5× faster interactions reported
→ See references/react-compiler.md for details
Quick Reference
use() Hook
// Read promise in render (with Suspense)
const data = use(dataPromise)
// Read context conditionally (unique to use())
if (condition) {
const theme = use(ThemeContext)
}
→ See references/templates/use-promise.md
useOptimistic
const [optimisticValue, setOptimistic] = useOptimistic(actualValue)
// Update UI immediately, server updates later
→ See references/templates/optimistic-update.md
useActionState
const [state, action, isPending] = useActionState(asyncFn, initialState)
→ See references/templates/action-form.md
useEffectEvent (19.2)
const onEvent = useEffectEvent(() => {
// Always has fresh props/state, doesn't trigger re-run
})
useEffect(() => {
connection.on('event', onEvent)
}, []) // No need to add onEvent to deps
→ See references/new-hooks.md
Breaking Changes from 18
| Change | Migration |
|---|---|
ref is a prop |
Remove forwardRef wrapper |
Context is provider |
Use <Context value={}> directly |
useFormStatus |
Import from react-dom |
→ See references/migration-18-19.md
Best Practices
- Data fetching: Use
use()+ Suspense, NOT useEffect - Forms: Use Actions + useActionState
- Optimistic UI: Use
useOptimisticfor instant feedback - Tabs/Modals: Use
<Activity>to preserve state - Effect events: Use
useEffectEventfor non-reactive callbacks - Memoization: Let React Compiler handle it
Templates
React 19 Patterns
| Template | Use Case |
|---|---|
templates/action-form.md |
Form with useActionState |
templates/optimistic-update.md |
useOptimistic pattern |
templates/activity-tabs.md |
Activity component tabs |
templates/use-promise.md |
use() with promises |
Classic Hooks Patterns
| Template | Use Case |
|---|---|
templates/state-patterns.md |
useState patterns |
templates/effect-patterns.md |
useEffect patterns |
templates/ref-patterns.md |
useRef patterns |
templates/custom-hooks.md |
Custom hooks implementations |
templates/external-store.md |
useSyncExternalStore patterns |
Performance Patterns
| Template | Use Case |
|---|---|
templates/virtual-list.md |
TanStack Virtual for long lists |
templates/lazy-components.md |
Code splitting and lazy loading |
templates/profiling-devtools.md |
React DevTools Profiler |
Performance
Virtualization
Render only visible items for large lists (100+ items).
→ See references/virtualization.md
Lazy Loading
Code split routes and heavy components for smaller bundles.
→ See references/lazy-loading.md
Profiling
Measure render performance with DevTools Profiler.
→ See references/profiling.md
Note: With React Compiler (19.1+), manual memo/useMemo/useCallback optimizations are mostly obsolete. Profile first to verify if optimization is needed.
Forbidden (Outdated Patterns)
- ❌
useEffectfor data fetching → useuse()+ Suspense - ❌
forwardRef→ userefas prop - ❌
<Context.Provider>→ use<Context value={}> - ❌ Manual useMemo/useCallback everywhere → let Compiler handle it
- ❌ Conditional rendering for state preservation → use
<Activity>