React
Based on React 19 with TypeScript. Always use functional components with Hooks.
Preferences
- Prefer TypeScript over JavaScript
- Prefer functional components over class components
- Prefer composition over inheritance
- Use
useMemo and useCallback judiciously for performance optimization
- Avoid prop drilling with Context or composition
Core
| Topic |
Description |
Reference |
| Hooks |
useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useId, useTransition, useDeferredValue, useSyncExternalStore |
hooks |
| Component Patterns |
Function components, props, children, composition, render props, forwardRef, memo |
components-patterns |
Features
| Topic |
Description |
Reference |
| Advanced Features |
Suspense, Error Boundary, Lazy loading, Context, Refs, Portals |
advanced-features |
Quick Reference
Function Component with TypeScript
import { useState, useEffect, useCallback, useMemo } from 'react'
interface Props {
title: string
count?: number
onUpdate: (value: string) => void
}
export function MyComponent({ title, count = 0, onUpdate }: Props) {
const [value, setValue] = useState<string>('')
const doubled = useMemo(() => count * 2, [count])
const handleClick = useCallback(() => {
onUpdate(value)
}, [onUpdate, value])
useEffect(() => {
console.log('Component mounted or count changed:', count)
return () => console.log('Cleanup')
}, [count])
return (
<div>
<h1>{title} - {doubled}</h1>
<button
</div>
)
}
Key Imports
// State & Refs
import { useState, useRef, useReducer, useId } from 'react'
// Effects & Lifecycle
import { useEffect, useLayoutEffect, useInsertionEffect } from 'react'
// Performance
import { useMemo, useCallback, useTransition, useDeferredValue } from 'react'
// Context & Refs
import { useContext, useRef, forwardRef, useImperativeHandle, useSyncExternalStore } from 'react'
// Components
import { memo, useDeferredValue, Suspense, lazy, createContext, createRef } from 'react'
1---2name: react3description: React Hooks, TypeScript, component patterns, and modern React best practices. Use when writing React components, hooks, context, or using Suspense/ErrorBoundary/Lazy loading.4---56# React78> Based on React 19 with TypeScript. Always use functional components with Hooks.910## Preferences1112- Prefer TypeScript over JavaScript13- Prefer functional components over class components14- Prefer composition over inheritance15- Use `useMemo` and `useCallback` judiciously for performance optimization16- Avoid prop drilling with Context or composition1718## Core1920| Topic | Description | Reference |21|-------|-------------|-----------|22| Hooks | useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useId, useTransition, useDeferredValue, useSyncExternalStore | [hooks](references/hooks.md) |23| Component Patterns | Function components, props, children, composition, render props, forwardRef, memo | [components-patterns](references/components-patterns.md) |2425## Features2627| Topic | Description | Reference |28|-------|-------------|-----------|29| Advanced Features | Suspense, Error Boundary, Lazy loading, Context, Refs, Portals | [advanced-features](references/advanced-features.md) |3031## Quick Reference3233### Function Component with TypeScript3435```tsx36import { useState, useEffect, useCallback, useMemo } from 'react'3738interface Props {39 title: string40 count?: number41 onUpdate: (value: string) => void42}4344export function MyComponent({ title, count = 0, onUpdate }: Props) {45 const [value, setValue] = useState<string>('')4647 const doubled = useMemo(() => count * 2, [count])4849 const handleClick = useCallback(() => {50 onUpdate(value)51 }, [onUpdate, value])5253 useEffect(() => {54 console.log('Component mounted or count changed:', count)55 return () => console.log('Cleanup')56 }, [count])5758 return (59 <div>60 <h1>{title} - {doubled}</h1>61 <button onClick={handleClick}>Click</button>62 </div>63 )64}65```6667### Key Imports6869```ts70// State & Refs71import { useState, useRef, useReducer, useId } from 'react'7273// Effects & Lifecycle74import { useEffect, useLayoutEffect, useInsertionEffect } from 'react'7576// Performance77import { useMemo, useCallback, useTransition, useDeferredValue } from 'react'7879// Context & Refs80import { useContext, useRef, forwardRef, useImperativeHandle, useSyncExternalStore } from 'react'8182// Components83import { memo, useDeferredValue, Suspense, lazy, createContext, createRef } from 'react'84```