React compara cada dependencia con su valor del render anterior usando Object.is y vuelve a ejecutar el efecto solo si alguna cambió. Un array vacío significa ejecutar una vez tras el montaje; omitir el array significa ejecutar después de cada render. Se rompe cuando dejas fuera una dependencia y capturas un valor obsoleto, o cuando incluyes un objeto o una función que se recrean en cada render, lo que hace que el efecto entre en bucle infinito.
Por qué lo preguntan los entrevistadores
Los efectos son donde vive la mayoría de los bugs de React, así que el entrevistador quiere ver si entiendes los closures y las instantáneas de cada render en lugar de tratar el array como un conjuro mágico. Quiere oír que no silencias la regla del linter, que sabes distinguir un closure obsoleto de un bucle infinito y, en el mejor caso, que te preguntas si el efecto tiene que existir siquiera.
Cómo estructurar tu respuesta
- Explica la comparación y cuándo se vuelve a ejecutar el efecto de verdad.
- Describe los dos fallos clásicos: closure obsoleto y bucle de renders.
- Di cómo arreglas cada uno, con actualizaciones funcionales, refs o sacando cosas fuera.
- Termina cuestionando si el efecto debería estar ahí siquiera.
Ejemplo de respuesta
React guarda el array del último render y compara cada elemento con Object.is. Si todo coincide se salta el efecto; si algo difiere ejecuta la limpieza del efecto viejo y luego el nuevo. El detalle es que el efecto captura las props y el estado del render que lo creó, así que si dejo algo fuera del array me queda un valor obsoleto que va quedándose desfasado en silencio. La otra cara es meter ahí un objeto o una función flecha, porque esas son referencias nuevas en cada render y el efecto se dispara en bucle. Mis arreglos habituales son actualizaciones funcionales de estado para no necesitar el valor actual como dependencia, sacar las constantes fuera del componente y envolver un callback solo cuando de verdad tiene que ser dependencia. Aun así, la primera pregunta que me hago es si el efecto debería existir. La mayoría de los efectos que he borrado calculaban estado derivado, que es simplemente un cálculo durante el render, o traían datos que pertenecían al router o a una librería de queries.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo manejas un efecto que necesita el valor más reciente pero no debería volver a ejecutarse cuando ese valor cambia?
- ¿Cuándo usarías useLayoutEffect en su lugar?
- ¿Qué se ejecuta primero, la limpieza del efecto anterior o el efecto nuevo?
Más preguntas para Desarrollador React
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas