Hasta ahora, tus componentes hacen una cosa: reciben datos y devuelven JSX. Pero las aplicaciones reales necesitan hacer cosas que van más allá del render:
Todo esto son efectos secundarios — operaciones que no son "calcular qué se ve en pantalla". Y React tiene un hook específico para ellos: useEffect.
useEffect recibe dos argumentos:
Raramente útil. Puede causar bucles infinitos si el efecto actualiza estado.
[]: solo al montarPerfecto para: fetch inicial, suscripciones, timers, setup.
[valor]: cuando cambianSe ejecuta al montar Y cada vez que count cambie. No se ejecuta si otras cosas cambian.
Algunos efectos necesitan "limpiarse" cuando el componente se desmonta o antes de ejecutar el efecto de nuevo. Por ejemplo, si creas un setInterval, necesitas un clearInterval para que no se acumule:
La función que retornas desde useEffect es la función de limpieza. React la llama:
Desglosado:
useState(new Date()) — el estado guarda la hora actualuseEffect con [] — solo se ejecuta al montarsetInterval — actualiza la hora cada segundoreturn () => clearInterval(id) — limpia el intervalo al desmontarSin la limpieza, cada vez que el componente se monte crearía un nuevo intervalo sin destruir el anterior. Con el tiempo, tendrías cientos de intervalos corriendo.
Cada vez que count cambia, el título de la pestaña se actualiza.
Crea un reloj digital que:
useStateuseEffect con un setInterval que actualice la hora cada segundoclearIntervaluseEffect es tu herramienta para conectar React con el mundo exterior. Con useState controlas QUÉ se ve. Con useEffect controlas QUÉ PASA.