Diagnosticar y corregir re-renders lentos en React
Encuentra por qué un componente React va lento, mide con el Profiler y aplica las correcciones adecuadas (colocación del estado, memo, virtualización, transiciones) con código antes y después. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.
Avanzado · Código · Pendiente de revisión editorial
Prompt
Actúa como especialista en rendimiento de React que diagnostica antes de optimizar.
Contexto:
- Código implicado: {{codigo}}
- Síntoma observado: {{sintoma}}
- Datos de medición (si los hay): {{medicion}}
- Versión de React: {{version_react}}
Si el código no basta para entender de dónde vienen las props o el estado, pídeme los componentes padre o el contexto antes de proponer cambios.
Entregables:
1. Hipótesis ordenadas por probabilidad de por qué hay re-renders o trabajo excesivo (estado demasiado arriba, contexto que cambia en cada render, objetos o funciones nuevos en cada render, listas largas sin virtualizar, cálculos caros en el render, keys inestables).
2. Cómo confirmar cada hipótesis con React DevTools Profiler (qué grabar, qué mirar en el flamegraph y en «por qué se renderizó») y, si procede, con el panel Performance del navegador.
3. Las correcciones, de menor a mayor complejidad: mover el estado hacia abajo, pasar contenido como children, dividir el contexto, useMemo/useCallback/memo solo donde la medición lo justifique, useDeferredValue o useTransition para entradas de texto, virtualización de listas.
4. Código antes y después de cada cambio aplicado, explicando el efecto esperado.
5. Cómo verificar la mejora con la misma medición y qué umbral considerar suficiente.
6. Qué no hacer: envolver todo en memo, optimizar sin medir o romper la legibilidad por ganancias mínimas.
Restricciones:
- No inventes tiempos ni mejoras porcentuales; si no tengo mediciones, explícame cómo obtenerlas y deja [COMPLETAR].
- Si la versión incluye React Compiler, ten en cuenta que ya memoriza automáticamente y ajusta las recomendaciones.
- Mantén el comportamiento funcional idéntico.
Formato: diagnóstico, plan de medición, cambios con bloques de código y una lista de verificación final.Cómo usarlo
- Pega el componente lento y sus padres directos. 2. Describe el síntoma con precisión (qué acción, cuánto tarda, en qué dispositivo). 3. Graba el Profiler, pega lo que veas y aplica los cambios de uno en uno midiendo cada vez.
Ejemplo de uso
Código: TablaPedidos.tsx con 2000 filas y un filtro de texto · Síntoma: escribir en el filtro se retrasa en un portátil de gama media · Medición: sin datos · Versión: React 18.
Resultado de ejemplo
Hipótesis (de más a menos probable)
- Cada pulsación filtra las 2000 filas y re-renderiza todas en el mismo render urgente.
- Las filas no están memoizadas y reciben objetos nuevos en cada render.
- Falta virtualización: el DOM contiene las 2000 filas.
Cómo medir primero
En React DevTools → Profiler, graba mientras escribes 5 letras. Busca commits largos en TablaPedidos y activa «Record why each component rendered». Tiempo por commit antes del cambio: [COMPLETAR].
Cambio 1: separar la escritura del filtrado
import { memo, useDeferredValue, useMemo, useState } from 'react';
export function TablaPedidos({ pedidos }: { pedidos: Pedido[] }) {
const [filtro, setFiltro] = useState('');
const filtroDiferido = useDeferredValue(filtro);
const visibles = useMemo(
() => pedidos.filter((p) => p.cliente.toLowerCase().includes(filtroDiferido.toLowerCase())), // [COMPLETAR: campo real]
[pedidos, filtroDiferido],
);
return (
<>
<input value={filtro} onChange={(e) => setFiltro(e.target.value)} aria-label="Filtrar pedidos" />
<Filas pedidos={visibles} />
</>
);
}
const Filas = memo(function Filas({ pedidos }: { pedidos: Pedido[] }) {
return <table><tbody>{pedidos.map((p) => <FilaPedido key={p.id} pedido={p} />)}</tbody></table>;
});
El input se actualiza de inmediato y la lista se recalcula con menor prioridad; memo evita repintar las filas mientras el valor diferido no cambia. Si sigue lento, el siguiente paso es virtualizar…
Datos clave
- Categoría
- Programación y desarrollo · React
- Tipo de resultado
- Código
- Nivel
- Avanzado
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Código implicado, Síntoma, Datos de medición y Versión de React
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Debo poner useMemo y useCallback en todas partes?
No. Tienen coste propio y complican el código. Úsalos cuando el Profiler muestre que un cálculo o un re-render concreto pesa, o cuando una referencia estable sea necesaria para que memo funcione.
¿Cuándo hace falta virtualizar una lista?
Cuando se renderizan cientos o miles de elementos complejos a la vez y el Profiler o el panel Performance muestran que el coste viene de montar esos nodos. Con listas cortas no suele compensar.
¿Para qué sirve este prompt?
Encuentra por qué un componente React va lento, mide con el Profiler y aplica las correcciones adecuadas (colocación del estado, memo, virtualización, transiciones) con código antes y después.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Código implicado, Síntoma, Datos de medición y Versión de React). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel avanzado: está pensado para personas con experiencia en el tema que sepan evaluar y ajustar el resultado.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.