useEffect(fn, []) ejecuta fn…
Opciones
- Después de cada render del mismo componente
- Una vez tras el montaje, y limpia al desmontar (Opción correcta)
- Antes del primer render del componente
- Nunca, porque un array vacío desactiva los efectos
Respuesta
Una vez tras montarse el componente (limpieza al desmontar); en desarrollo, StrictMode monta, desmonta y vuelve a ejecutar una vez para sacar a la luz bugs
Por qué
useEffect ejecuta efectos secundarios (traer datos, suscripciones, timers) después de que React dibuje el componente.
El array de dependencias dice cuándo volver a ejecutarlo: [] = solo tras el primer render; [userId] = cada vez que cambie userId; sin array = tras cada render.
La función que devuelves es la limpieza (cancelar suscripciones, limpiar timers). En desarrollo, StrictMode ejecuta los efectos dos veces a propósito para revelar limpiezas que faltan.
Recuerda
El array de dependencias controla cuándo se vuelve a ejecutar un efecto.