Un composant se re-rend quand son propre state change, quand un contexte qu'il consomme publie une nouvelle valeur, ou quand son parent se re-rend et produit un nouvel élément pour lui. Le rendu se contente d'appeler la fonction et de produire une description de l'interface. React compare ensuite ça à l'arbre précédent et ne commit que les changements de DOM qui diffèrent, donc la plupart des re-rendus ne touchent aucun DOM.
Pourquoi les recruteurs posent cette question
Beaucoup de candidats dégainent useMemo et useCallback par réflexe sans savoir ce qui déclenche du travail au départ. Le recruteur veut la preuve que vous savez raisonner séparément sur la phase de rendu et la phase de commit, que vous mesurez avant d'optimiser, et que vous savez que la mémoïsation a un coût. C'est aussi un test discret : avez-vous déjà profilé une vraie application React ou seulement lu des articles sur la performance.
Comment structurer votre réponse
- Listez les trois déclencheurs d'un rendu.
- Séparez la phase de rendu de la phase de commit.
- Expliquez pourquoi une nouvelle prop objet casse la mémoïsation plutôt que de forcer du travail DOM.
- Dites comment vous mesureriez avant de changer quoi que ce soit.
Exemple de réponse
Trois choses le déclenchent : une mise à jour de state dans le composant, un changement de valeur d'un contexte auquel il est abonné, ou le re-rendu du parent. Ce dernier point surprend, parce qu'un rendu du parent réexécute toutes les fonctions enfants, que leurs props aient changé de valeur ou non. Mais le rendu ne produit qu'un arbre d'éléments. React le réconcilie avec l'arbre précédent et commit l'ensemble minimal de mutations du DOM, donc un re-rendu est souvent bon marché et ne touche aucun DOM. Les cas coûteux, ce sont les gros sous-arbres et les calculs lourds dans le corps du rendu. Quand une page semblait poussive sur un produit sur lequel je travaillais, j'ai ouvert le profiler des React DevTools au lieu de deviner, et le coupable était un seul contexte qui contenait à la fois l'utilisateur courant et une chaîne de recherche en direct, donc chaque frappe re-rendait toute la coquille authentifiée. Découper ça en deux contextes a réglé le problème en une dizaine de lignes. Je ne sors memo que quand le profiler me désigne un sous-arbre précis.
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
- Quand est-ce que React.memo aide vraiment, et quand n'est-ce que du surcoût ?
- Comment la prop key change-t-elle le comportement de la réconciliation ?
- Qu'utiliseriez-vous à la place du contexte pour des mises à jour à haute fréquence ?
Autres questions pour Développeur full stack
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