Como sabemos, isso useMemo
é usado para memorizar um valor e useCallback
para memorizar uma função. Quando se trata de todos os valores, exceto função, então eu uso useMemo
else useCallback
, mas me pergunto e se o valor for uma função, então memorizaria uma função usando useCallback
e useMemo
são iguais ou não.
function Diff(props) {
const { value } = props;
const memoizedFnUsingMemo = useMemo(() => () => value + value, [value]);
const memoizedFnUsingCallback = useCallback(() => value + value, [value]);
return (
<>
<h1>{memoizedFnUsingMemo()}</h1>
<h1>{memoizedFnUsingCallback()}</h1>
</>
);
}
export default function App() {
const [counter, setCounter] = useState(0);
function changeCounter(change) {
setCounter((c) => c + change);
}
return (
<div>
<h1>counter: {counter}</h1>
<button onClick={() => changeCounter(1)}> increment </button>
<button onClick={() => changeCounter(-1)}> decrement </button>
<Diff value={counter} />
</div>
);
}
A documentação é bastante clara sobre isso. Ambos são equivalentes. Com
useCallback
você não precisa escrever um wrapper extra e isso apenas fornece mais legibilidade do código.Dos documentos:
Link