React-fusklapp
En sökbar, utskrivbar React 19-referens — komponenter, JSX, hooks, de nya Actions-API:erna, context, refs och prestanda. Gratis.
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
Ingen post matchar “:q”.
Om React-fusklapp
Det här React-fusklappen riktar sig mot React 19 och kartlägger biblioteket efter koncept: komponenter och JSX, rendering och uppsättning, state och effects, React 19-hookar och API:er, formulär och Actions, props och komposition, events, listor och keys, context, refs, prestanda samt metadata och övrigt.
Den täcker både grunderna du använder i varje komponent — useState, useEffect, props, keys, kontrollerade fält — och de nyare React 19-tilläggen, inklusive de Actions-baserade formulärmönstren, så den fungerar både som repetition och som bro till de aktuella API:erna.
Fusklappen är gratis och körs i webbläsaren. Filtrera hookar och mönster direkt med sökrutan, hoppa mellan avsnitt via den klistrande innehållsförteckningen, kopiera valfritt utdrag med ett klick och skriv ut sidan som referens medan du bygger komponenter.
Så använder du React-fusklapp
- Skumma igenom avsnitten, från Komponenter & JSX och State & effects till React 19-hookar & API:er och Prestanda.
- Sök efter en hook eller ett koncept som useEffect, key eller context för att filtrera listan direkt.
- Hoppa till Formulär & Actions eller Refs via den klistrande sidomenyn när du behöver ett specifikt mönster.
- Klicka på ett utdrag eller dess kopieringsikon för att kopiera koden till din komponent.
- Skriv ut fusklappen som en offline React-referens.