ชีตสรุป React
เอกสารอ้างอิง React 19 ที่ค้นหาและพิมพ์ได้——คอมโพเนนต์, JSX, hook, Actions API ใหม่, context, ref และประสิทธิภาพ ฟรี
Components & JSX
12function App() { return <h1>Hi</h1>; }
export default function App() {}
<Greeting name="Ada" />
{1 + 2} or {user.name}
<>{a}{b}</>
<div className="card">
{isOpen && <Menu />}
{ok ? <Yes /> : <No />}
{items.map(i => <li key={i.id}>{i.t}</li>)}
function Btn({ label, onClick }) {}
function Card({ children }) { return children; }
<input value={v} onChange={onChange} />
Rendering & setup
10import { createRoot } from 'react-dom/client'
createRoot(document.getElementById('root')).render(<App/>)
import { StrictMode } from 'react'
<StrictMode><App /></StrictMode>
import { hydrateRoot } from 'react-dom/client'
hydrateRoot(el, <App />)
root.unmount()
import App from './App.jsx'
<App {...props} />
export { Button, Card }
State & effects
12const [count, setCount] = useState(0)
setCount(c => c + 1)
setUser(u => ({ ...u, name }))
useEffect(() => { run(); }, [dep])
useEffect(() => { /* once */ }, [])
useEffect(() => () => cleanup(), [])
const ref = useRef(null)
const [state, dispatch] = useReducer(r, init)
const theme = useContext(ThemeContext)
const memo = useMemo(() => calc(a), [a])
useLayoutEffect(() => {}, [])
useSyncExternalStore(sub, get)
React 19 hooks & APIs
12import { use } from 'react'
const data = use(promise)
const theme = use(ThemeContext)
const [state, action, pending] = useActionState(fn, init)
const [opt, addOpt] = useOptimistic(state, reducer)
const { pending } = useFormStatus()
const [isPending, startTransition] = useTransition()
startTransition(async () => await save())
const deferred = useDeferredValue(value)
const id = useId()
<title>Page title</title>
function Input({ ref }) {}
Forms & Actions
12<form action={handleSubmit}>
function handleSubmit(formData) {}
formData.get('email')
const [state, action] = useActionState(submit, null)
<form action={action}>
const [s, a, pending] = useActionState(fn, init)
return { error: 'Invalid' }
function Submit() { const { pending } = useFormStatus() }
<button disabled={pending}>Save</button>
import { requestFormReset } from 'react-dom'
requestFormReset(formEl)
<form action={action}><Submit /></form>
Props & composition
10function Hi({ name = 'Guest' }) {}
function Box({ children }) { return children; }
<Box><p>Inside</p></Box>
function List({ render }) { return render(); }
<List render={() => <Item />} />
<Input {...props} />
const { id, ...rest } = props
<Avatar {...rest} size="lg" />
function Btn(props: BtnProps) {}
<Slot label={<b>Hi</b>} />
Events
10<button onClick={handleClick}>
function handleClick(e) {}
<input onChange={e => set(e.target.value)} />
<form onSubmit={e => e.preventDefault()}>
e.stopPropagation()
<li onClick={() => remove(id)}>
<input onKeyDown={e => e.key === 'Enter'}
<div onMouseEnter={hover}>
e.currentTarget.value
<button onClick={() => {}} type="button">
Lists & keys
10arr.map(x => <li key={x.id}>{x.t}</li>)
key={item.id}
key={index}
users.map(u => <Card key={u.id} {...u} />)
{list.length === 0 && <Empty />}
import { Fragment } from 'react'
<Fragment key={id}>{a}{b}</Fragment>
{rows.filter(r => r.on).map(...)}
Keys must be unique among siblings
{[...Array(n)].map((_, i) => ...)}
Context
10const ThemeContext = createContext('light')
import { createContext } from 'react'
<ThemeContext value={theme}>
<ThemeContext value={theme}><App /></ThemeContext>
const theme = useContext(ThemeContext)
const theme = use(ThemeContext)
if (cond) { const t = use(Ctx); }
export const ThemeContext = createContext()
<Ctx value={{ user, setUser }}>
Avoid new objects each render
Refs
10const inputRef = useRef(null)
<input ref={inputRef} />
inputRef.current.focus()
function Field({ ref }) { return <input ref={ref} /> }
<Field ref={inputRef} />
useImperativeHandle(ref, () => ({ focus }))
const setRef = node => { box = node; }
<div ref={setRef} />
const count = useRef(0)
ref={node => { return () => cleanup(); }}
Performance
10const Memo = memo(Component)
import { memo } from 'react'
const value = useMemo(() => calc(a), [a])
const fn = useCallback(() => f(a), [a])
const Lazy = lazy(() => import('./Big.jsx'))
import { lazy, Suspense } from 'react'
<Suspense fallback={<Spin />}><Lazy /></Suspense>
startTransition(() => setQuery(q))
const slow = useDeferredValue(query)
React Compiler auto-memoizes
Misc & metadata
10<Suspense fallback={<Loading />}>
class ErrorBoundary extends Component {}
<title>My Page</title>
<meta name="description" content="..." />
<link rel="stylesheet" href="..." />
<Comp key={id} />
React.lazy(() => import('./Page.jsx'))
createPortal(node, container)
{/* a comment */}
cleanup return in useEffect
ไม่มีรายการที่ตรงกับ “:q”
เกี่ยวกับ ชีตสรุป React
สรุปข้อมูล React นี้เจาะจงที่ React 19 และแบ่งไลบรารีตามแนวคิด ได้แก่ components และ JSX, การเรนเดอร์และการตั้งค่า, state และ effects, hooks และ API ของ React 19, ฟอร์มและ Actions, props และการประกอบคอมโพเนนต์, events, lists และ keys, context, refs, ประสิทธิภาพ และ metadata กับเรื่องเบ็ดเตล็ดอื่น ๆ
ครอบคลุมทั้งพื้นฐานที่คุณใช้ในทุกคอมโพเนนต์ เช่น useState, useEffect, props, keys, controlled inputs และส่วนเพิ่มใหม่ของ React 19 รวมถึงรูปแบบฟอร์มที่อิงกับ Actions จึงใช้ได้ทั้งเป็นตัวทบทวนความรู้และเป็นสะพานเชื่อมไปสู่ API ปัจจุบัน
ชีทนี้ใช้งานฟรีและทำงานฝั่งไคลเอนต์ กรอง hooks และรูปแบบต่าง ๆ ได้สดด้วยกล่องค้นหา กระโดดข้ามส่วนต่าง ๆ ได้จากสารบัญแบบ sticky คัดลอก snippet ใดก็ได้ด้วยคลิกเดียว และพิมพ์หน้านี้เก็บไว้เป็นข้อมูลอ้างอิงระหว่างสร้างคอมโพเนนต์
วิธีใช้ ชีตสรุป React
- ไล่ดูแต่ละส่วน ตั้งแต่ Components & JSX และ State & effects ไปจนถึง React 19 hooks & APIs และ Performance
- ค้นหา hook หรือแนวคิดอย่าง useEffect, key หรือ context เพื่อกรองชีทแบบสด
- กระโดดไปยัง Forms & Actions หรือ Refs ผ่านแถบด้านข้างแบบ sticky เมื่อต้องการรูปแบบเฉพาะ
- คลิกที่ snippet หรือไอคอนคัดลอกของมัน เพื่อคัดลอกโค้ดไปใส่ในคอมโพเนนต์ของคุณ
- พิมพ์ชีทนี้เก็บไว้เป็นข้อมูลอ้างอิง React แบบออฟไลน์