Molemmat välimuistavat jotakin renderöintien yli, joten sitä ei tarvitse laskea/luoda uudelleen joka kerta:
- välimuistii .
Molemmat välimuistavat jotakin renderöintien yli, joten sitä ei tarvitse laskea/luoda uudelleen joka kerta:
useMemouseCallback välimuistii funktion identiteetin (se on useMemo(() => fn, deps)).Ne ovat olemassa (a) kalliin työn toistamisen välttämiseksi ja (b) referenssitasapainon rikkomisen välttämiseksi, johon memoized lapsikomponentit luottavat.
function Table({ rows, onSelect }) {
// (a) expensive computation — recompute only when `rows` changes
const sorted = useMemo(() => rows.slice().sort(byName), [rows]);
// (b) stable function identity — so a React.memo child doesn't re-render,
// and effects depending on it don't re-fire
const handleSelect = useCallback(id => onSelect(id), [onSelect]);
return <Grid rows={sorted} onSelect={handleSelect} />;
}
Ilman useCallbackia handleSelect on täysin uusi funktio jokaisella renderöinnillä. React.memo(Grid) näkee "uuden" propssin ja renderöi uudelleen joka tapauksessa, mikä poistaa memoivoinnin hyödyn. Sama pätee objektiin, joka välitetään memoized lapsikomponentille tai käytetään useEffect riippuvuustaulukossa.
const x = useMemo(() => a + b, [a, b]); // ❌ pointless — adding is cheaper than memoizing
useMemo/useCallback kaikkialla lisää melua ja voi olla jopa hitaampi. (React 19:n kääntäjä voi auto-memoida, mikä vähentää tarvetta.)