Hooks
useState, useRef, useMemo, useEffect, useLayoutEffect.
useState
Local component state.
let [count, setCount] = useState(0)
setCount(count + 1)
// or with updater
setCount((prev) => prev + 1)useRef
Mutable ref that persists across renders.
let inputRef = useRef(null)
// inputRef.current holds the DOM node after renderuseMemo
Memoizes a computed value. Recomputes when deps change. Matches React: (factory, deps).
let doubled = useMemo(() => count * 2, [count])useEffect
Runs after paint. Use for side effects, subscriptions, fetch.
useEffect(() => {
// runs when dep1 or dep2 change
fetch("/api/data").then(...)
return () => { /* cleanup */ }
}, [dep1, dep2])useLayoutEffect
Runs synchronously after DOM updates, before paint. Use for layout measurements or DOM mutations that must not cause a flash.
useLayoutEffect(() => {
// measure or mutate DOM
return () => { /* cleanup */ }
}, [])unstable_batchedUpdates
Batches multiple state updates into a single re-render.
import { unstable_batchedUpdates, useState } from 'lattish'
unstable_batchedUpdates(() => {
setA(1)
setB(2)
setC(3)
})
// one re-render, not three