react-19

SkillAI & models

Use when implementing React 19.2 patterns — use(), useOptimistic, useActionState, useEffectEvent, Activity component, React Compiler.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the react-19 skill

What this skill tells your AI

The instructions your AI receives, as published by fusengine/agents in plugins/react-expert/skills/react-19/SKILL.md and read by ahel’s review.

Also documents all classic hooks (useState, useEffect, useLayoutEffect, useRef, useImperativeHandle, useMemo, useCallback, useId, useSyncExternalStore) and React 18→19 breaking changes (ref as a prop instead of forwardRef, <Context value={}> instead of <Context.Provider>). This is the core React hooks/features skill — for global state see react-state, for forms see react-forms, and for SOLID architecture rules see solid-react.

React 19.2 Core Features

Agent Workflow (MANDATORY)

Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:

  1. fuse-ai-pilot:explore-codebase - Analyze existing React patterns and component structure
  2. fuse-ai-pilot:research-expert - Verify latest React 19.2 docs via Context7/Exa
  3. 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

HookPurposeGuide
use()Read promises/context in renderreferences/new-hooks.md
useOptimisticOptimistic UI updatesreferences/new-hooks.md
useActionStateForm action state managementreferences/new-hooks.md
useFormStatusForm pending state (child components)references/new-hooks.md
useEffectEventNon-reactive callbacks in effectsreferences/new-hooks.md

→ See references/new-hooks.md for detailed usage


Classic Hooks (React 18+)

State Hooks

HookPurposeGuide
useStateLocal component statereferences/use-state.md

→ For global state, see react-state skill

Effect Hooks

HookPurposeGuide
useEffectSide effects after paintreferences/use-effect.md
useLayoutEffectSync DOM before paintreferences/use-layout-effect.md

Ref Hooks

HookPurposeGuide
useRefDOM access, mutable valuesreferences/use-ref.md
useImperativeHandleCustomize ref APIreferences/use-imperative-handle.md

Performance Hooks (Rare with Compiler)

HookPurposeGuide
useMemoMemoize expensive valuesreferences/use-memo.md
useCallbackMemoize functionsreferences/use-callback.md

→ React Compiler handles most memoization automatically

Other Hooks

HookPurposeGuide
useIdUnique IDs for accessibilityreferences/use-id.md
useSyncExternalStoreExternal store subscriptionreferences/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

ChangeMigration
ref is a propRemove forwardRef wrapper
Context is providerUse <Context value={}> directly
useFormStatusImport from react-dom

→ See references/migration-18-19.md


Best Practices

  1. Data fetching: Use use() + Suspense, NOT useEffect
  2. Forms: Use Actions + useActionState
  3. Optimistic UI: Use useOptimistic for instant feedback
  4. Tabs/Modals: Use <Activity> to preserve state
  5. Effect events: Use useEffectEvent for non-reactive callbacks
  6. Memoization: Let React Compiler handle it

Templates

React 19 Patterns

TemplateUse Case
templates/action-form.mdForm with useActionState
templates/optimistic-update.mduseOptimistic pattern
templates/activity-tabs.mdActivity component tabs
templates/use-promise.mduse() with promises

Classic Hooks Patterns

TemplateUse Case
templates/state-patterns.mduseState patterns
templates/effect-patterns.mduseEffect patterns
templates/ref-patterns.mduseRef patterns
templates/custom-hooks.mdCustom hooks implementations
templates/external-store.mduseSyncExternalStore patterns

Performance Patterns

TemplateUse Case
templates/virtual-list.mdTanStack Virtual for long lists
templates/lazy-components.mdCode splitting and lazy loading
templates/profiling-devtools.mdReact 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)

  • useEffect for data fetching → use use() + Suspense
  • forwardRef → use ref as prop
  • <Context.Provider> → use <Context value={}>
  • ❌ Manual useMemo/useCallback everywhere → let Compiler handle it
  • ❌ Conditional rendering for state preservation → use <Activity>

Signals

GitHub stars
25
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
react-19
Source
github.com/fusengine/agents