El hook useCallback
en React sirve para memorizar una instancia de una función entre renderizados. Esto puede ser especialmente útil para mejorar el rendimiento en componentes React que se renderizan frecuentemente o tienen un gran número de componentes hijos.
import React, { useState, useCallback } from 'react';
function App() {
const [contador, actualizarContador] = useState(0);
const incrementarContador = useCallback(() => {
actualizarContador(contador => contador + 1);
}, []);
return (
<div>
<p>Contador: {contador}</p>
<button onClick={incrementarContador}>Incrementar</button>
</div>
);
}
export default App;
En este ejemplo, useCallback
está asegurando que el incremento en el contador se haga a la función incrementarContador
y no a la instancia de dicha función, con cada re-renderizado del componente App
. Esto tiene como ventaja que, si la función incrementarContador
se pasa como prop a un componente hijo, este componente hijo no se re-renderizará a menos que cambie el valor del contador, porque la referencia a la función incrementarContador
no cambia con cada re-renderizado.
Dicho de otra forma, useCallback
devuelve una versión memorizada de la función que solo cambia si cambian las dependencias. Este hook es útil cuando pasas callbacks a componentes optimizados que dependen de la igualdad de referencias para evitar re-renderizados innecesarios (por ejemplo, shouldComponentUpdate
).
Es importante tener en cuenta que el uso de useCallback
tiene ciertas implicaciones en términos de rendimiento, en especial en comparación con el uso de funciones normalmente definidas dentro de componentes de función. La memorización puede ser costosa desde el punto de vista de la memoria y la ejecución de las funciones envueltas en useCallback
es algo más lenta que las funciones no encerradas. Normalmente, los beneficios de useCallback
solo se manifiestan en casos concretos de aplicaciones con muchos componentes o con rutinas de procesamiento muy costosas.