Οδηγός React
Ένας οδηγός αναφοράς React 19 με δυνατότητα αναζήτησης και εκτύπωσης — components, JSX, hooks, τα νέα Actions API, context, refs και απόδοση. Δωρεάν.
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
Αυτό το cheat sheet για το React αφορά το React 19 και χαρτογραφεί τη βιβλιοθήκη ανά έννοια: components και JSX, rendering και ρύθμιση, state και effects, τα hooks και τα APIs του React 19, forms και Actions, props και σύνθεση, events, λίστες και keys, context, refs, απόδοση, καθώς και metadata και διάφορα.
Καλύπτει τόσο τα βασικά που χρησιμοποιείτε σε κάθε component — useState, useEffect, props, keys, ελεγχόμενα inputs — όσο και τις νεότερες προσθήκες του React 19, συμπεριλαμβανομένων των μοτίβων φορμών βασισμένων σε Actions, ώστε να λειτουργεί τόσο ως υπενθύμιση όσο και ως γέφυρα προς τα τρέχοντα APIs.
Το φύλλο είναι δωρεάν και λειτουργεί στον browser. Φιλτράρετε hooks και μοτίβα ζωντανά με το πλαίσιο αναζήτησης, μεταβείτε μεταξύ ενοτήτων από τον κολλητό πίνακα περιεχομένων, αντιγράψτε οποιοδήποτε απόσπασμα με ένα κλικ και εκτυπώστε τη σελίδα ως αναφορά ενώ χτίζετε components.
Πώς να χρησιμοποιήσετε το Οδηγός React
- Ρίξτε μια ματιά στις ενότητες, από τα Components & JSX και τα State & effects μέχρι τα React 19 hooks & APIs και την Performance.
- Αναζητήστε ένα hook ή μια έννοια όπως useEffect, key ή context για να φιλτράρετε ζωντανά το φύλλο.
- Μεταβείτε στα Forms & Actions ή στα Refs μέσω της κολλητής πλαϊνής μπάρας όταν χρειάζεστε ένα συγκεκριμένο μοτίβο.
- Κάντε κλικ σε ένα απόσπασμα ή στο εικονίδιο αντιγραφής του για να αντιγράψετε τον κώδικα στο component σας.
- Εκτυπώστε το φύλλο για μια offline αναφορά React.