Question d'entretien pour Développeur React

Quelles sont les caractéristiques de performance du React Context, et comment l'empêchez-vous de refaire le rendu de la moitié de l'application ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Chaque consommateur refait son rendu quand la valeur du provider change par référence, quelle que soit la partie de la valeur qu'il lit, parce que le contexte n'a pas de sélecteur. Un provider qui tient un gros objet reconstruit à chaque rendu va donc faire re-rendre tous les consommateurs en permanence. On corrige en mémoïsant la valeur, en séparant l'état et le dispatch dans deux contextes distincts, ou en plaçant les données dans un store externe auquel les consommateurs s'abonnent avec des sélecteurs.

Pourquoi les recruteurs posent cette question

Le contexte est l'API la plus détournée de React, donc le recruteur veut savoir si vous en avez souffert. Il guette le fait qu'il n'y a pas d'abonnement partiel, et des solutions pratiques plutôt qu'une interdiction générale du contexte. Mentionner useSyncExternalStore ou une petite bibliothèque de store montre que vous savez à partir de quand le contexte cesse d'être le bon outil.

Comment structurer votre réponse

  • Énoncez la règle : tout changement de valeur fait re-rendre tous les consommateurs.
  • Expliquez pourquoi : pas de sélecteur, et la comparaison se fait par référence.
  • Listez les correctifs dans l'ordre : mémoïser, séparer, puis passer à un store.
  • Dites ce à quoi le contexte est vraiment bon, comme une configuration stable.

Exemple de réponse

Exemple parlé, à la première personne

Le contexte est d'abord un mécanisme d'injection de dépendances, et un gestionnaire d'état très loin derrière. Le problème de performance, c'est que les consommateurs s'abonnent à la valeur entière, donc dès que la valeur du provider change d'identité, tous les consommateurs en dessous se rendent, même celui qui ne lit qu'un seul booléen. La première chose que je vérifie, c'est si le provider construit un nouvel objet en ligne dans le JSX, parce que c'est une nouvelle référence à chaque rendu du parent et ça annule tout le reste. Ensuite je sépare les contextes, parce qu'en général les données changent souvent et les setters ne changent jamais, donc mettre le dispatch dans son propre contexte coupe l'essentiel du bruit. S'il me faut encore des sélecteurs, j'arrête de faire semblant que le contexte est un store et je mets l'état dans un vrai store, puis je m'abonne avec useSyncExternalStore ou une bibliothèque pour que chaque composant prenne sa tranche. Là où le contexte reste excellent, c'est pour les choses stables : le thème, l'utilisateur courant, une locale, une instance de client. Ça ne change quasiment jamais, donc le coût de re-rendu n'a aucune importance.

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 marche

Questions de relance à prévoir

  • Comment useSyncExternalStore évite-t-il le problème de re-rendu ?
  • Que se passe-t-il avec des providers imbriqués du même contexte ?
  • Utiliseriez-vous le contexte pour l'état d'un formulaire ? Pourquoi pas ?

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

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot