రెండూ ప్రతిసారి పুনర్గణన చేయని/పునర్నిర్మించని విధంగా రెండర్ల్లో ఏదైనా కాష్ చేస్తాయి:
useMemoకాష్ చేస్తుంది.
రెండూ ప్రతిసారి పুনర్గణన చేయని/పునర్నిర్మించని విధంగా రెండర్ల్లో ఏదైనా కాష్ చేస్తాయి:
useMemo కాష్ చేస్తుంది.useCallback ఫంక్షన్ గుర్తింపును కాష్ చేస్తుంది (ఇది useMemo(() => fn, deps)).ఇవి (ఎ) ఖరీదైన కంటెంట్ను పునరావృత్తి చేయడం నుండి మరియు (బి) మెమోయిజ్ చేసిన పిల్లలు ఆధారపడే సూచన సమానతను విచ్ఛిన్నం చేయడం నుండి నిరోధించడానికి ఉన్నాయి.
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 ప్రతిసారి రెండర్ కోసం సంపూర్ణ నতून ఫంక్షన్. A React.memo(Grid) "నూతన" prop ని చూసి ఏమైనా పున:రెండర్ చేస్తుంది, మెమోయిజేషన్ను ఓడించింది. ఒక మెమోయిజ్ చేసిన పిల్లకు పంపిన లేదా useEffect డిపెండెన్సీ శ్రేణిలో ఉపయోగించిన ఆబ్జెక్ట్ కోసం అదేవిధంగా.
const x = useMemo(() => a + b, [a, b]); // ❌ pointless — adding is cheaper than memoizing
useMemo/useCallback అన్నిచోటా శబ్దాన్ని జోడిస్తుంది మరియు నెమ్మదిగా కూడా ఉండవచ్చు. (React 19 యొక్క కంపైలర్ స్వయంచాలకంగా మెమోయిజ్ చేయగలదు, అవసరాన్ని తగ్గిస్తుంది.)