React compare chaque dépendance à sa valeur du rendu précédent avec Object.is et ne relance l'effet que si l'une d'elles a changé. Un tableau vide veut dire une exécution unique après le montage ; omettre le tableau veut dire une exécution après chaque rendu. Ça part de travers quand vous oubliez une dépendance et capturez une valeur périmée, ou quand vous incluez un objet ou une fonction recréés à chaque rendu, ce qui fait boucler l'effet indéfiniment.
Pourquoi les recruteurs posent cette question
Les effets sont là où vivent la plupart des bugs React, donc le recruteur cherche à savoir si vous comprenez les closures et les instantanés de rendu, plutôt que de traiter le tableau comme une incantation magique. Il veut vous entendre dire que vous ne faites pas taire la règle de lint, que vous savez nommer la différence entre une closure périmée et une boucle infinie, et idéalement que vous vous demandez si l'effet a lieu d'exister.
Comment structurer votre réponse
- Expliquez la comparaison et le moment où l'effet se relance vraiment.
- Décrivez les deux échecs classiques : closure périmée et boucle de rendu.
- Dites comment vous corrigez chacun, avec des mises à jour fonctionnelles, des refs ou une remontée hors du composant.
- Finissez en questionnant si l'effet a sa place là.
Exemple de réponse
React garde le tableau du dernier rendu et compare chaque élément avec Object.is. Si tout correspond, il saute l'effet ; si quelque chose diffère, il exécute le nettoyage de l'ancien puis lance le nouveau. Le piège, c'est que l'effet capture les props et l'état du rendu qui l'a créé, donc si j'en oublie un dans le tableau, j'obtiens une valeur périmée qui se démode en silence. L'autre versant, c'est d'y mettre un objet ou une fonction fléchée, parce que ce sont des références neuves à chaque rendu, donc l'effet tourne en boucle. Mes correctifs habituels : des mises à jour d'état fonctionnelles pour ne pas avoir besoin de la valeur courante en dépendance, sortir les constantes du composant, et n'envelopper un callback que quand il doit vraiment être une dépendance. Honnêtement, la première question que je me pose, c'est si l'effet devrait exister. La plupart des effets que j'ai supprimés calculaient de l'état dérivé, ce qui est juste un calcul pendant le rendu, ou récupéraient des données qui avaient leur place dans le routeur ou dans une bibliothèque de requêtes.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Comment gérez-vous un effet qui a besoin de la dernière valeur mais ne doit pas se relancer quand elle change ?
- Quand utiliseriez-vous useLayoutEffect à la place ?
- Qu'est-ce qui s'exécute en premier, le nettoyage de l'ancien effet ou le nouvel effet ?
Autres questions pour Développeur React
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions