Dies sind beides Optimierungs-Hooks in React, aber sie dienen leicht unterschiedlichen Zwecken.
Lassen Sie es uns aufschlüsseln:
1. Zweck:
2. Was sie zurückgeben:
3. Anwendungsfälle:
4. Syntax:
const memoizedCallback = useCallback( () => { doSomething(a, b); }, [a, b], ); const memoizedValue = useMemo( () => computeExpensiveValue(a, b), [a, b] );
5. Auswirkungen auf die Leistung:
Sehen wir uns einige Beispiele an, um die Unterschiede zu veranschaulichen:
Beispiel für die Verwendung von useCallback:
import React, { useState, useCallback } from 'react'; const ParentComponent = () => { const [count, setCount] = useState(0); const handleClick = useCallback(() => { setCount(count + 1); }, [count]); return ( <div> <ChildComponent onClick={handleClick} /> <p>Count: {count}</p> </div> ); }; const ChildComponent = React.memo(({ onClick }) => { console.log('ChildComponent rendered'); return <button onClick={onClick}>Increment</button>; });
In diesem Beispiel wird useCallback verwendet, um die handleClick-Funktion zu speichern. Dies ist nützlich, da ChildComponent in React.memo eingeschlossen ist, was bedeutet, dass es nur dann erneut gerendert wird, wenn sich seine Requisiten ändern. Durch die Verwendung von useCallback stellen wir sicher, dass handleClick zwischen den Renderings die gleiche Referenz beibehält (es sei denn, die Anzahl ändert sich), wodurch unnötige erneute Renderings von ChildComponent verhindert werden.
Beispiel für die Verwendung von useMemo:
import React, { useState, useMemo } from 'react'; const ExpensiveComponent = ({ list }) => { const sortedList = useMemo(() => { console.log('Sorting list'); return [...list].sort((a, b) => a - b); }, [list]); return ( <div> <h2>Sorted List:</h2> {sortedList.map(item => <div key={item}>{item}</div>)} </div> ); }; const ParentComponent = () => { const [list] = useState([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]); const [count, setCount] = useState(0); return ( <div> <ExpensiveComponent list={list} /> <button onClick={() => setCount(count + 1)}> Clicked {count} times </button> </div> ); };
In diesem Beispiel wird useMemo verwendet, um die sortierte Liste zu speichern. Der teure Sortiervorgang wird nur ausgeführt, wenn sich die Listenstütze ändert, nicht bei jedem Rendern von ExpensiveComponent. Dies ist hier besonders nützlich, da ParentComponent aus Gründen, die nichts mit der Liste zu tun haben, möglicherweise erneut gerendert wird (z. B. wenn sich die Anzahl ändert) und wir die Liste nicht unnötig neu sortieren möchten.
Wichtige Erkenntnisse:
Folgen Sie uns für weitere Inhalte wie diesen!
Das obige ist der detaillierte Inhalt vonReagieren: useCallback vs. useMemo. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!