Lección 12 de 13 · Lectura y práctica
Limpieza en useEffect
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(().
Esta es una lección del contenido anterior de Cursalo. Si ya estudiaste o compraste este curso, entra con tu cuenta para guardar tu progreso y abrir el resto de las clases. No necesitas comprar nada de nuevo.
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