En React, los renders innecesarios pueden afectar el rendimiento de una aplicación. Para optimizarlos, podemos usar React.memo, que memoriza el resultado de un componente y evita su re-render si sus props no han cambiado.
React.memo para evitar renders innecesarios
React.memo es una función de orden superior (HOC) que envuelve un componente y lo vuelve "puro", es decir, solo se re-renderiza si sus props cambian.
Ejemplo:
import React from "react";
const Saludo = React.memo(({ nombre }) => {
console.log("Renderizando Saludo...");
return <h2>Hola, {nombre}!</h2>;
});
export default function App() {
const [contador, setContador] = React.useState(0);
return (
<div>
<Saludo nombre="Carlos" />
<p>Contador: {contador}</p>
<button onClick={() => setContador(contador + 1)}>Incrementar</button>
</div>
);
}
Saludo se renderiza solo una vez, porque su prop (nombre) no cambia.
nombre cambia, se renderizará nuevamente.
Por defecto, React.memo usa comparación superficial para detectar cambios en las props. Si necesitas una validación más profunda, puedes usar una función de comparación personalizada:
const Saludo = React.memo(({ usuario }) => {
console.log("Renderizando Saludo...");
return <h2>Hola, {usuario.nombre}!</h2>;
}, (prevProps, nextProps) => prevProps.usuario.id === nextProps.usuario.id);
Aquí, el componente solo se re-renderiza si el ID del usuario cambia.
Más información en la documentación de React.
Jorge García
Fullstack developer