Limpieza en useEffect

Lectura
12 min~2 min lectura
Objetivo de la lección

Funcion de limpieza (cleanup) Algunos efectos necesitan limpieza para evitar memory leaks.

Puntos de control
  • Funcion de limpieza (cleanup)
  • Ejemplo: Timer
  • Ejemplo: Event listener
  • Ejemplo: Suscripcion

Funcion de limpieza (cleanup)

Algunos efectos necesitan limpieza para evitar memory leaks. Retorna una funcion de useEffect para limpiar.

Ejemplo: Timer

function Timer() {
  const [seconds, setSeconds] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => {
      setSeconds(s => s + 1);
    }, 1000);

    // Cleanup: se ejecuta al desmontar
    // o antes del proximo efecto
    return () => {
      clearInterval(interval);
    };
  }, []);

  return <p>Segundos: {seconds}</p>;
}

Ejemplo: Event listener

function WindowSize() {
  const [size, setSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight
  });

  useEffect(() => {
    const handleResize = () => {
      setSize({
        width: window.innerWidth,
        height: window.innerHeight
      });
    };

    window.addEventListener('resize', handleResize);

    return () => {
      window.removeEventListener('resize', handleResize);
    };
  }, []);

  return <p>{size.width} x {size.height}</p>;
}

Ejemplo: Suscripcion

function ChatRoom({ roomId }) {
  useEffect(() => {
    const connection = createConnection(roomId);
    connection.connect();

    return () => {
      connection.disconnect();
    };
  }, [roomId]);

  return <div>Chat Room: {roomId}</div>;
}

Cuando necesitas cleanup?

  • Timers (setInterval, setTimeout)
  • Event listeners
  • Suscripciones (WebSocket, observers)
  • Conexiones externas

Orden de ejecucion

useEffect(() => {
  console.log('1. Efecto ejecutado');

  return () => {
    console.log('2. Cleanup ejecutado');
  };
}, [dep]);

// Cuando 'dep' cambia:
// 1. Cleanup del efecto anterior
// 2. Nuevo efecto ejecutado

Practica de portfolio

Convierte esta leccion en evidencia real: arma una entrega pequena que puedas mostrar en una entrevista, en LinkedIn o en tu portfolio. Trabaja con un caso propio o con una empresa ficticia, pero deja claro el problema, la decision y el resultado.

  • Entregable: una captura, documento, repositorio o tablero con el resultado final.
  • Checklist: objetivo, pasos seguidos, criterio de calidad y mejora pendiente.
  • Mini-rubrica: si otra persona lo revisa, debe entender que hiciste, por que y como repetirlo.
Laboratorio de práctica

Antes de marcar esta lección como completa, escribí una evidencia breve para React Fundamentals: un ejemplo, una decisión, una captura, una mini demo o una nota que puedas reutilizar en portfolio.

Reflexión rápida

¿Qué cambiarías en tu forma de trabajar después de aplicar limpieza en useeffect?

De lección a portfolio

Convertí esta lección en una prueba técnica visible.

Una app pequeña publicada, con README y decisiones explicadas, funciona mejor que una lista de tecnologías sueltas.

Paso 1

Creá una demo mínima que use el concepto de la lección.

Paso 2

Escribí un README corto con objetivo, stack, decisión técnica y mejora futura.

Paso 3

Publicá la demo y enlazala desde tu perfil profesional.

Newsletter Cursalo

Recibí rutas y cursos nuevos

Sumate para recibir recursos orientados a empleo y portfolio.

  • Rutas de empleo
  • Cursos prácticos
  • Portfolio y entrevistas

Sin spam. También podés entrar con tu cuenta para guardar progreso. Iniciá sesión