ორივე ინახავს რამეს რენდერებს შორის, ისე რომ ის ყოველ ჯერზე გადასახელოს/თავიდან არ შეიქმნას:
useMemoინახავს .
ორივე ინახავს რამეს რენდერებს შორის, ისე რომ ის ყოველ ჯერზე გადასახელოს/თავიდან არ შეიქმნას:
useMemo ინახავს .useCallback ინახავს ფუნქციის იდენტობას (ეს არის useMemo(() => fn, deps)).ისინი აქ არსებობენ იმისთვის, რომ თავიდან აიცილო (a) महँগo სამუშაოს გამეორება და (b) შემოწმებული ტოლობა, რომელზეც დამემოიზებული ბავშვები დამოკიდებულები არიან.
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} />;
}
useCallback-ის გარეშე, handleSelect არის სრულიად ახალი ფუნქცია ყოველი რენდერისას. React.memo(Grid) დაინახავდა "ახალ" პროპს და გადაიტანიდა ამენდებ, დამემოიზაციის დამარცხვით. იგივე ეხება ობიექტს, რომელიც გადაეცემა დამემოიზებულ ბავშვს ან გამოიყენება useEffect-ის დამოკიდებულების მასივში.
const x = useMemo(() => a + b, [a, b]); // ❌ pointless — adding is cheaper than memoizing
useMemo/useCallback ყველგან დაამატებს ხმაურს და შეიძლება იყო კიდეც უფრო ნელი. (React 19-ის კომპილატორი შეუძლია ავტომატურად დამემოიზება, რაც ამცირებს საჭიროებას.)