useEffect: dependencias, cleanup y prevención de fugas

Aprende a modelar correctamente dependencias y funciones de limpieza para evitar efectos duplicados, fugas de memoria y datos obsoletos.

Cuando un componente interactúa con suscripciones, intervalos o listeners globales, no basta con montar el efecto: también hay que desmontarlo correctamente.

La función de limpieza de useEffect evita fugas y comportamientos duplicados al salir del componente o al cambiar dependencias.

Un error muy habitual es dejar arrays de dependencias incompletos para 'callar warnings', generando estados desincronizados difíciles de depurar.

La regla profesional es clara: declara todas las dependencias reales y simplifica la lógica cuando el effect se vuelve difícil de mantener.

  • React ejecuta la limpieza antes de volver a ejecutar el effect y también al desmontar el componente.
  • Si creas un `setInterval`, debes limpiarlo con `clearInterval` para evitar timers activos después de salir de la vista.
  • Si registras `window.addEventListener`, debes removerlo con `removeEventListener` en cleanup.
  • Esta simetría montar/desmontar es clave para componentes estables en producción.
  • El array no es una optimización manual, es una declaración de qué valores usa tu effect.

Qué hace exactamente el cleanup

React ejecuta la limpieza antes de volver a ejecutar el effect y también al desmontar el componente.

Si creas un `setInterval`, debes limpiarlo con `clearInterval` para evitar timers activos después de salir de la vista.

Si registras `window.addEventListener`, debes removerlo con `removeEventListener` en cleanup.

Esta simetría montar/desmontar es clave para componentes estables en producción.

Dependencias: contrato de sincronización

El array no es una optimización manual, es una declaración de qué valores usa tu effect.

Estrategia cuando el effect crece demasiado

Si un effect acumula muchas ramas y dependencias, suele indicar falta de separación de responsabilidades.

Un effect pequeño y específico se depura más rápido y minimiza efectos colaterales.

La limpieza explícita es parte del diseño, no un añadido al final.

  • Divide effects por responsabilidad (red, listeners, analytics...).
  • Extrae lógica a funciones o custom hooks.
  • Evita mezclar sincronización externa con cálculos de render.
  • Prioriza claridad sobre micro-optimizaciones tempranas.
React
08

useEffect: dependencias, cleanup y prevención de fugas

Aprende a modelar correctamente dependencias y funciones de limpieza para evitar efectos duplicados, fugas de memoria y datos obsoletos.

Código del tema: useEffect(() => { /* sync */ }, []);

📘 Teoría

Qué hace exactamente el cleanup

React ejecuta la limpieza antes de volver a ejecutar el effect y también al desmontar el componente.

1

Si creas un `setInterval`, debes limpiarlo con `clearInterval` para evitar timers activos después de salir de la vista.

2

Si registras `window.addEventListener`, debes removerlo con `removeEventListener` en cleanup.

3

Esta simetría montar/desmontar es clave para componentes estables en producción.

Dependencias: contrato de sincronización

El array no es una optimización manual, es una declaración de qué valores usa tu effect.

Estrategia cuando el effect crece demasiado

Si un effect acumula muchas ramas y dependencias, suele indicar falta de separación de responsabilidades.

Un effect pequeño y específico se depura más rápido y minimiza efectos colaterales.

La limpieza explícita es parte del diseño, no un añadido al final.

  • Divide effects por responsabilidad (red, listeners, analytics...).
  • Extrae lógica a funciones o custom hooks.
  • Evita mezclar sincronización externa con cálculos de render.
  • Prioriza claridad sobre micro-optimizaciones tempranas.

🧪 Aprende probando

Ejemplo Ejemplo: reloj con interval y cleanup Caso típico donde olvidar cleanup provoca múltiples intervalos acumulados.

🏁 Retos

Reto Reto: añade limpieza al listener Completa el effect para eliminar el listener de scroll al desmontar.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre React.

Test de React

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com