馃 useCallback en React: memorizar funciones para optimizar componentes
El Hook useCallback permite memorizar funciones en React, evitando que se redefinan en cada renderizado. Esto es 煤til para optimizar componentes, especialmente aquellos que se pasan como props a componentes hijos que dependen de igualdad de referencias.
1️⃣ Sintaxis b谩sica de useCallback
const memoizedFunction = useCallback(
() => {
// funci贸n a memorizar
},
[dependencias]
);
Donde dependencias son los valores que, al cambiar, har谩n que la funci贸n se vuelva a crear.
2️⃣ Ejemplo pr谩ctico: contador con funci贸n memorizada
import { useState, useCallback } from "react";
function Contador() {
const [contador, setContador] = useState(0);
const incrementar = useCallback(() => {
setContador(c => c + 1);
}, []);
return (
<div>
<h2>Contador: {contador}</h2>
<button onClick={incrementar}>Incrementar</button>
</div>
);
}
export default Contador;
Ejemplo visual de useCallback
Contador: 0
3️⃣ Cu谩ndo usar useCallback
- ⚡ Cuando pasas funciones como props a componentes hijos que dependen de igualdad de referencias.
- 馃 Para evitar renders innecesarios de componentes memoizados (
React.memo). - 馃摝 En funciones complejas que no necesitan redefinirse en cada render.
4️⃣ Ejemplo avanzado: optimizando componente hijo
Memorizamos la funci贸n y evitamos renderizados innecesarios del componente hijo.
import { useState, useCallback } from "react";
const Hijo = React.memo(({ incrementar }) => {
console.log("Render del hijo");
return <button onClick={incrementar}>Incrementar desde hijo</button>;
});
function Padre() {
const [contador, setContador] = useState(0);
const incrementar = useCallback(() => {
setContador(c => c + 1);
}, []);
return (
<div>
<h2>Contador: {contador}</h2>
<Hijo incrementar={incrementar} />
</div>
);
}
export default Padre;
5️⃣ Resumen
- 馃 useCallback memoriza funciones y optimiza renderizados.
- ⚡ Evita que funciones se redefinan en cada render.
- ✅ 脷til en componentes memoizados y props que dependen de funciones.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias