Top 40 des questions et réponses d'entretien sur React JS (2026)

Vous vous préparez à un entretien d'embauche pour un poste en React JS ? Il est temps de découvrir ce qui vous attend. Comprendre questions d'entretien sur React JS permet de révéler à la fois votre clarté conceptuelle et vos points forts en matière de mise en œuvre concrète.

React JS offre d'immenses opportunités de carrière aux professionnels possédant une expérience technique et une expertise métier. Que vous soyez débutant ou senior avec 5 ou 10 ans d'expérience, vos compétences analytiques et votre expertise technique sont essentielles. Ces questions-réponses aident les chefs d'équipe, les managers et les développeurs à perfectionner leurs compétences et à réussir les entretiens d'embauche les plus prestigieux.

S’appuyant sur les observations de plus de 85 professionnels, dont des responsables du recrutement et des chefs techniques, ce recueil reflète la diversité des attentes du secteur et les pratiques d’entretien réelles observées au sein d’équipes de travail dans différents domaines.

Questions et réponses d'entretien sur React JS

Questions et réponses d'entretien les plus fréquentes sur React JS

1) Expliquez le DOM virtuel et comment fonctionne la réconciliation dans React.

Réponse:

Le DOM virtuel est une représentation en mémoire de l'interface utilisateur que React utilise pour traiter efficacement les modifications d'interface. Lorsque l'état ou les propriétés changent, React génère un nouvel arbre DOM virtuel, puis exécute une fonction de rendu. différent L'algorithme est appliqué à l'arbre précédent afin de découvrir l'ensemble minimal d'opérations DOM réelles nécessaires. Ce processus est appelé réconciliation, minimise les changements de mise en page et les recalculs coûteux du navigateur. React attribue clés Il compare les éléments des listes pour faciliter la correspondance des nœuds entre les rendus et utilise des heuristiques (comme la comparaison des types et des clés) pour décider de mettre à jour, de réorganiser ou de supprimer les nœuds. Il en résulte des mises à jour prévisibles, une réduction des risques de bogues et de meilleures performances pour les interfaces utilisateur complexes.

Exemple :

Affichage d'une liste dynamique de messages de chat : en utilisant une structure stable key valeurs (identifiants de message), seuls les nouveaux messages sont ajoutés au DOM tandis que les nœuds existants restent intacts, évitant ainsi des rendus inutiles.

👉 Téléchargement PDF gratuit : Questions et réponses d’entretien sur React JS


2) Quels sont les différents types de cycles de vie des composants dans React, et comment les Hooks s'y intègrent-ils ?

Réponse:

Les composants React passent par des phases de montage, de mise à jour et de démontage. Dans les composants de classe, des méthodes de cycle de vie telles que componentDidMount, shouldComponentUpdate, componentDidUpdatebauen componentWillUnmount gèrent les effets secondaires, les décisions de rendu et le nettoyage. Dans les composants fonctionnels, Crochets fournir des capacités équivalentes : useEffect Gère les effets après le rendu ; fonctions de nettoyage internes useEffect s'exécuter lors du démontage ou avant l'effet suivant ; useMemo et useCallback mémorisation de contrôle ; et useRef Les hooks conservent des références modifiables entre les rendus. Leurs avantages incluent la composabilité, la réduction des problèmes de liaison avec « this » et une réutilisation plus aisée de la logique grâce aux hooks personnalisés. Leur principal inconvénient réside dans la nécessité d'apprendre les règles des hooks et la gestion des dépendances.

Répondre avec des exemples :

  • Effet de montage : useEffect(() => fetchData(), []).
  • Nettoyage lors du démontage : useEffect(() => { start(); return stop; }, []).

3) Comment choisir entre le rendu côté client (CSR), le rendu côté serveur (SSR), la génération de site statique (SSG) et la régénération statique incrémentale (ISR) pour une application React ?

Réponse:

La stratégie de rendu doit être guidée par les exigences en matière d'expérience utilisateur, la fraîcheur des données, les besoins en matière de référencement, les contraintes d'infrastructure et la vitesse de développement. CSR Convient aux applications hautement interactives nécessitant une authentification, où le référencement naturel est secondaire. RSS Fournit un premier affichage avec des données réelles pour les pages publiques, améliorant ainsi le temps de chargement initial et le référencement, mais avec des coûts de serveur plus élevés. SSG précalcule les pages au moment de la compilation pour une vitesse et une mise en cache optimales lorsque les données changent rarement. Rapport de recherche internationale Les pages statiques sont mises à jour progressivement à la demande, offrant ainsi un équilibre entre fraîcheur et performance. Les facteurs pris en compte incluent la mise en cache, la personnalisation, la latence pour les utilisateurs internationaux et la complexité opérationnelle.

Tableau : Avantages et inconvénients

Approche Avantages Désavantages
CSR Hébergement simple, interactivité riche Peinture initiale plus lente, référencement plus faible
RSS Excellent référencement, données fraîches dès le premier chargement Charge serveur plus élevée, complexité accrue
SSG Rapide, économique et compatible avec les CDN Contenu obsolète jusqu'à la reconstruction
Rapport de recherche internationale Rapide avec une fraîcheur contrôlée Plus d'éléments à gérer

4) Quelle stratégie de gestion d'état doit être utilisée : état local, Context, Redux ou bibliothèques de requêtes ?

Réponse:

Choisissez le l'outil le plus simple qui gère les caractéristiques du problème. État local du composant via useState or useReducer est idéal pour les problèmes d'interface utilisateur isolés. Contexte Fonctionne principalement pour les valeurs en lecture seule à l'échelle de l'application (thème, paramètres régionaux, utilisateur actuel), mais n'est pas optimisé pour les mises à jour fréquentes sur de grandes arborescences. Redux ou des systèmes de stockage événementiels similaires excellent lorsque vous avez besoin de prévisibilité, de débogage temporel, de middleware et de flux de données unidirectionnels stricts. bibliothèques d'extraction de données (Par exemple, les modèles de requêtes React) gèrent le cycle de vie de l'état du serveur (mise en cache, déduplication, stratégies de récupération et synchronisation), réduisant ainsi le code répétitif. Une architecture pragmatique utilise fréquemment cette approche. État local + Contexte de configuration + Bibliothèque d'état du serveur, réservant Redux aux flux de travail complexes.

Exemple :

Un tableau de bord utilise React Query pour la mise en cache de l'API, Context pour le thème, et useReducer à l'intérieur de widgets complexes pour la gestion d'événements locaux.


5) Quelle est la différence entre useEffect et useLayoutEffect, et quand chacun s'applique-t-il ?

Réponse:

useEffect Il s'exécute après que le navigateur a terminé son rendu, ce qui le rend adapté aux tâches non bloquantes telles que la récupération de données, les abonnements et la journalisation. useLayoutEffect exécute de manière synchrone après les modifications du DOM mais avant le rendu., permettant des ajustements de mesure et de mise en page qui doivent s'effectuer sans scintillement (par exemple, la lecture des dimensions des éléments et la réapplication synchrone des styles). L'inconvénient de useLayoutEffect Il peut bloquer la peinture et nuire à la réactivité en cas de surutilisation. Une bonne règle consiste à commencer par useEffect pour les effets secondaires et consultez useLayoutEffect uniquement lorsque vous devez mesurer ou modifier de manière synchrone la mise en page pour garantir l'exactitude visuelle.

Répondre avec des exemples :

  • useEffect: récupérer le profil utilisateur après le rendu.
  • useLayoutEffect: mesurer la taille d'une infobulle pour la positionner avant de peindre.

Comparaison rapide

Caractéristique useEffet utiliserLayoutEffect
Timing Après la peinture Avant la peinture
Cas d'utilisation Données, abonnements Mesures, corrections de mise en page synchrones
Analyse Quelques petits problèmes si lourd Bloque la peinture si elle est épaisse

6) Expliquez comment fonctionnent les clés dans les listes et les pièges liés à l'utilisation des indices de tableau.

Réponse:

Les clés permettent à React d'identifier précisément les éléments d'une liste entre les rendus. Des clés stables et uniques permettent à React de réorganiser, d'insérer ou de supprimer des éléments en minimisant les modifications du DOM. indices de tableau L'utilisation de clés pose problème lorsque des éléments peuvent être réorganisés, insérés ou supprimés, car React risque d'associer un état précédent au mauvais élément, ce qui peut entraîner des bugs subtils (par exemple, des valeurs d'entrée ou des animations incorrectes). Il est préférable d'utiliser un identifiant immuable et spécifique au domaine, tel qu'un identifiant de base de données. Si la liste est véritablement statique et ne change jamais d'ordre, les index sont acceptables, mais cela reste l'exception.

Exemple :

Un tableau Kanban déplaçable doit utiliser des identifiants de carte, et non des indices, afin de préserver l'identité des composants lors du glisser-déposer.


7) Où les techniques de mémoïsation s'appliquent-elles dans React, et quels sont leurs avantages et leurs inconvénients ?

Réponse:

La mémoïsation réduit les calculs et les rendus inutiles en réutilisant les résultats précédents lorsque les entrées n'ont pas changé. Dans React, React.memo cache la sortie du composant, useMemo cache les calculs coûteux, et useCallback Cette fonction mémorise les identités des fonctions transmises à ses enfants. Ses principaux avantages sont la stabilité des performances et la réduction de la consommation du processeur en cas d'interactions importantes. Ses inconvénients incluent la complexité, le risque de bogues liés à un cache obsolète en cas de dépendances incorrectes et la surcharge mémoire.

Tableau : Différentes méthodes de mémorisation

Type Interet Facteurs typiques à prendre en compte
React.memo(Component) Ignorer le rendu si les propriétés sont peu profondes et égales Volatilité des propriétés, coût des enfants
useMemo(fn, deps) valeurs calculées du cache Coût du calcul par rapport à la mémoire
useCallback(fn, deps) Identité de fonction stable Exactitude des dépendances

Répondre avec des exemples :

Mémoriser un ensemble de données filtré et trié pour une grille à l'aide de useMemo, et enveloppez les composants de rendu de cellules avec React.memo pour éviter les tempêtes de rendu.


8) Préférez-vous les composants contrôlés ou non contrôlés pour les formulaires ? Discutez des avantages, des inconvénients et des types d’état des formulaires.

Réponse:

Composants contrôlés lier les entrées à l'état React via value et onChangeCette approche permet la validation, le masquage et l'interface utilisateur conditionnelle à partir d'une source unique de vérité. Ses avantages résident dans la prévisibilité et la facilité d'intégration avec d'autres états ; son principal inconvénient est le coût de rendu à chaque frappe sans optimisation. Composants non contrôlés S'appuyer sur le DOM comme source de vérité via des références permet de réduire la surcharge et de simplifier le câblage des formulaires de base, mais la validation est moins centralisée. Pour les flux de travail complexes, une approche hybride est courante : elle utilise des champs contrôlés pour les champs critiques et des champs non contrôlés pour les zones volumineuses contenant beaucoup de texte.

Exemple :

Un formulaire d'inscription utilise des champs contrôlés pour la validation de l'adresse électronique et du mot de passe, tandis qu'une zone de texte pour les notes n'est pas contrôlée afin de réduire la surcharge liée au rendu.


9) Quand utiliseriez-vous Context plutôt qu'un hook personnalisé, et quelle est la différence conceptuelle entre eux ?

Réponse:

Contexte est une mécanisme de transport pour les valeurs dont de nombreux composants ont besoin, évitant ainsi la transmission de propriétés. Il ne gère pas l'état lui-même ; il l'expose simplement à ses descendants. crochet personnalisé Il encapsule la logique réutilisable (combinant état, effets et services externes) et renvoie des valeurs et des fonctions. Utilisez Context pour fournir une configuration partagée, principalement en lecture, ou pour exposer un magasin de données, et utilisez des hooks personnalisés pour implémenter le comportement du magasin ou orchestrer des aspects tels que l'authentification, les indicateurs de fonctionnalités ou les politiques de récupération de données. Les deux sont complémentaires : un modèle courant est useAuth() comme un crochet personnalisé soutenu par un AuthContext.

Répondre avec des exemples :

AuthProvider fournit l'utilisateur et les jetons via Context ; useAuth Gère les effets secondaires de la connexion, de l'actualisation et de la déconnexion.


10) Pouvez-vous décrire les stratégies d'optimisation des performances pour les grandes applications React, y compris les caractéristiques des rendus lents et des points chauds du cycle de vie ?

Réponse:

L'optimisation des performances commence par la mesure. Identifiez les chemins lents à l'aide du profileur React DevTools et des panneaux de performance du navigateur afin de localiser les points chauds de réconciliation et les commits coûteux. Les tactiques incluent : État local (maintenir l'État proche de ses consommateurs), mémorisation (React.memo, useMemo, useCallback), liste virtualisation pour les longues listes, fractionnement de code avec chargement différé pour réduire le bundle initial, et anti-rebond ou étranglement événements à haute fréquence. Pour les données stockées sur un serveur, adoptez la mise en cache avec une bibliothèque de requêtes et tirez-en parti. suspense amical Optimisez le chargement en détectant les points chauds du cycle de vie, tels que les effets qui s'exécutent trop souvent en raison de tableaux de dépendances trop importants, ou les composants qui se redessinent à cause de valeurs de contexte qui changent fréquemment.

Répondre avec des exemples :

Virtualiser une table de 10 000 lignes à l’aide d’une bibliothèque de fenêtrage ; charger les graphiques lourds en différé derrière un découpage du code basé sur les routes pour améliorer l’affichage initial.


11) Quelle est la différence entre les props et l'état dans React ?

Réponse:

Le props et state Elles influencent le rendu des composants, mais leur finalité et leur cycle de vie diffèrent fondamentalement. Props Les propriétés (abréviation de properties) sont des entrées immuables transmises d'un composant parent à un composant enfant, définissant la configuration ou les données à afficher. Elles circulent vers le bas dans le flux de données unidirectionnel de React et ne doit jamais être modifié par le composant récepteur. ÉtatEn revanche, cette propriété est modifiable et gérée en interne par le composant. Elle détermine un comportement dynamique qui évolue dans le temps, comme les valeurs des champs d'un formulaire ou la visibilité (activée ou désactivée).

Tableau des principales différences :

Facteur Props État
Mutabilité Immuable Mutable
La propriété Approuvé par les parents Appartenant au composant
Méthode de mise à jour Rendu parent useState or setState
Case Study Configuration Modifications dynamiques de l'interface utilisateur
Cycle de vie Existe pendant le rendu Persiste, déclenche des rendus à nouveau

Exemple :

A <Button color="blue" /> utilise des accessoires pour déterminer la couleur, tandis qu'un clicked L'état booléen active ou désactive le retour visuel.


12) Expliquez le modèle d'architecture de composants dans React et les différentes façons dont les composants sont classés.

Réponse:

Les applications React suivent un architecture basée sur les composants, en décomposant l'interface utilisateur en petits éléments de base réutilisables. Les composants peuvent être catégorisés selon leur but et responsabilité:

  1. Composants de présentation (muets) – Privilégier l'interface utilisateur, recevoir les données via les props et gérer rarement l'état.
  2. Composants de conteneur (intelligents) – Ils gèrent la logique, récupèrent les données et gèrent l'état ; ils génèrent les composants de présentation.
  3. Composants d'ordre supérieur (HOC) – Fonctions qui prennent un composant et renvoient une version améliorée avec un comportement supplémentaire.
  4. Composants purs – Optimiser les performances en comparant superficiellement les propriétés et l'état.
  5. Composants fonctionnels vs composants de classe – Les composants fonctionnels (avec des hooks) sont désormais privilégiés pour leur lisibilité et leurs performances.

Exemple :

A <UserProfile /> Le composant peut être de présentation, recevant des informations utilisateur, tandis que <UserProfileContainer /> récupère les données et gère leur cycle de vie.


13) Comment React gère-t-il les limites d'erreur, et pourquoi sont-elles importantes ?

Réponse:

limites d'erreur sont des composants React spéciaux qui interceptent JavaLes erreurs de script, où qu'elles se produisent dans l'arborescence des composants enfants, lors du rendu, des méthodes de cycle de vie ou des constructeurs, empêchent les plantages complets de l'application en isolant les défaillances à des sous-arborescences spécifiques. Vous pouvez en implémenter une en utilisant componentDidCatch(error, info) et static getDerivedStateFromError() dans un composant de classe.

Avantages :

  • Préservez la stabilité de l'interface utilisateur en affichant des interfaces de secours.
  • Capturez et enregistrez les erreurs à des fins d'analyse.
  • Empêcher les démontages en cascade.

Exemple :

class ErrorBoundary extends React.Component {
  state = { hasError: false };
  static getDerivedStateFromError() { return { hasError: true }; }
  render() { return this.state.hasError ? <h2>Something went wrong.</h2> : this.props.children; }
}

14) Que sont les fragments React et en quoi diffèrent-ils des wrappers ? éléments ?

Réponse:

Réagir débris (<></>) vous permettent de regrouper plusieurs éléments sans ajouter de nœuds supplémentaires au DOM. Ceci est essentiel pour une structure plus claire, notamment dans les listes, les tableaux et le HTML sémantique où des conteneurs supplémentaires pourraient engendrer des problèmes de mise en page ou d'accessibilité. Contrairement aux conteneurs <div>Les fragments ne sont pas rendus dans le DOM et présentent donc des avantages en termes de performances et de sémantique.

Exemple :

return (
  <>
    <h1>Title</h1>
    <p>Description</p>
  </>
);

Tableau des différences :

Facteur Fragment <div> Wrapper
Sortie DOM Aucun Ajoute un nœud supplémentaire
Case Study Groupement structurel Style ou mise en page
Performances Rapidité Léger surplomb

15) Quel Hook React utiliseriez-vous pour l'optimisation des performances et pourquoi ?

Réponse:

Les composants React sensibles aux performances s'appuient souvent sur crochets de mémoïsation et chargement paresseux pour minimiser le travail redondant. Les crochets courants comprennent :

  • useMemo → Met en cache les résultats coûteux en calcul.
  • useCallback → Empêche les rendus enfants inutiles dus aux changements d'identité de fonction.
  • useTransition → Reporte les mises à jour non urgentes pour une interface utilisateur plus fluide.
  • useDeferredValue → Reporte les calculs lourds jusqu'après les interactions immédiates.

Exemple :

Une grande grille de données utilisant useMemo Les résultats filtrés peuvent réduire la consommation du processeur de 50 % ou plus.

Avantages :

  • Réduit le gaspillage de rendu.
  • Maintient la réactivité de l'interface utilisateur même en cas de forte charge.

Désavantage:

  • Nécessite une précision dans la gestion des dépendances ; des erreurs de cache obsolètes peuvent survenir en cas de mauvaise gestion.

16) Que sont les portails React et quels sont leurs avantages ?

Réponse:

Portails Permet aux composants React d'afficher leurs enfants dans un nœud DOM situé en dehors de leur hiérarchie parente, notamment pour les modales, les infobulles ou les listes déroulantes qui doivent visuellement « échapper » aux contextes de débordement ou d'empilement. Implémenté à l'aide de ReactDOM.createPortal(child, container), ils maintiennent la cohérence de la propagation des événements, de sorte que les gestionnaires d'événements fonctionnent comme si l'élément était resté dans sa hiérarchie d'origine.

Tableau des avantages :

MSP Corp Description
Indépendance structurelle Rendu en dehors de l'arbre parent
Contrôle CSS/empilement Éviter les overflow: hidden ou problèmes d'index z
Propagation des événements Les événements synthétiques de React se propagent toujours correctement.
Réutilisable Idéal pour les superpositions globales

Exemple :

createPortal(<ModalContent />, document.getElementById('modal-root'));

17) Expliquez comment React Router gère la navigation et l'état entre les pages.

Réponse:

React Router est une bibliothèque de routage déclarative qui synchronise l'interface utilisateur avec l'URL du navigateur. Elle utilise le API historique manipuler l'historique de session sans rechargement complet de la page. Les concepts clés incluent : Routes, Liensbauen Outlet pour le routage imbriqué. La bibliothèque prend en charge itinéraires dynamiques, Paramètres d'URLbauen crochets de navigation (useNavigate, useParams, useLocationReact Router v6 a introduit une syntaxe simplifiée et des API de données pour chargeur et action fonctions, améliorant l'intégration SSR et la gestion d'état.

Exemple :

<Route path="/user/:id" element={<UserProfile />} />

Avantages:

  • Permet la navigation sur une seule page.
  • Conserve la position de défilement et l'historique.
  • S'intègre parfaitement avec le chargement différé pour de meilleures performances.

18) Quelles sont les différentes manières de gérer les effets secondaires dans les applications React ?

Réponse:

Les effets de bord désignent les actions qui affectent des éléments extérieurs au périmètre d'un composant (appels d'API, manipulation du DOM, abonnements). Les principaux outils sont :

  1. useEffect pour les effets côté client après le rendu.
  2. Gestionnaires d'événements pour les effets déclenchés par l'utilisateur.
  3. Crochets personnalisés pour réutiliser la logique des effets (par exemple, useFetch).
  4. Middleware (comme Redux Saga ou Thunk) pour une orchestration asynchrone complexe.
  5. React Query ou SWR pour gérer automatiquement l'état du serveur et les cycles de vie de récupération.

Exemple :

A useEffect récupère les données une seule fois au montage :

useEffect(() => { fetchData(); }, []);

Avantages :

Gestion asynchrone simplifiée, meilleure encapsulation et contrôle du cycle de vie plus clair.


19) React est-il un framework ou une bibliothèque ? Discutez des facteurs qui définissent la différence.

Réponse:

React est officiellement un bibliothèque math, et non un cadre complet. Il se concentre uniquement sur le couche de visualisation, en fournissant des abstractions de rendu, d'état et de composants sans imposer de routage, de récupération de données ou de structure de construction.

Tableau de comparaison:

Facteur Bibliothèque (React) Framework (Angular, Vue)
Domaine Afficher le rendu Architecture MVC complète
Dogmatique Faible Haute
Contrôle Axé sur les développeurs Cadre de référence
Souplesse Haute Limité par les conventions
Courbe de progression Modérée Plus élevé en raison de la complexité

L'écosystème de React (Redux, Router, Query, Next.js) forme en réalité un « méta-framework », offrant une composabilité modulaire qui permet aux développeurs de construire leur propre architecture.


20) Quand faut-il utiliser React.lazy et Suspense, et quels sont leurs avantages ?

Réponse:

React.lazy permet fractionnement de code en chargeant dynamiquement les composants uniquement lorsque cela est nécessaire, tandis que Suspense Fournit une interface utilisateur de secours jusqu'à ce que le composant soit prêt. Cette combinaison améliore les performances de chargement initial et la réactivité perçue par l'utilisateur.

Exemple :

const Chart = React.lazy(() => import('./Chart'));
<Suspense fallback={<Loader />}>
  <Chart />
</Suspense>

Tableau des avantages :

MSP Corp Explication
Performances Charge le code à la demande
Expérience utilisateur solution de repli pour le chargement progressif
Taille du paquet Pack initial plus petit
Simplicité API React native, configuration minimale

Meilleures pratiques :

  • Enveloppez plusieurs composants paresseux dans une seule limite Suspense.
  • Utilisez des indicateurs de repli pertinents pour l'accessibilité.

21) Expliquez ce que sont les composants serveur React (RSC) et leurs avantages.

Réponse:

Les composants serveur React (RSC) constituent une innovation majeure introduite pour améliorer les performances et l'expérience des développeurs en permettant aux composants de effectuer le rendu sur le serveur sans envoyer leur JavaScript destiné au clientElles s'exécutent entièrement sur le serveur, récupérant des données, lisant des bases de données ou effectuant des opérations d'E/S de manière sécurisée avant de diffuser la sortie sérialisée au client.

Avantages :

  • taille de paquet plus petite — Pas de JavaScript côté client pour la logique côté serveur.
  • Performance améliorée — La récupération des données côté serveur réduit les effets de cascade.
  • Sûreté — Le code sensible n'atteint jamais le navigateur.
  • Meilleure mise en cache — Les composants serveur sont mis en cache en périphérie.

Exemple :

A <ProductList /> Le composant serveur peut récupérer des données directement depuis une base de données et transmettre les résultats à un <ProductCard /> Composant client.


22) Quelle est la différence entre l'hydratation et la réconciliation de React ?

Réponse:

Bien que les deux termes impliquent la mise à jour de l'interface utilisateur par React, leur objectif diffère :

  • Réconciliation Il s'agit du processus de comparaison de l'arbre DOM virtuel avec sa version précédente afin de déterminer l'ensemble minimal de mises à jour du DOM.
  • par IV, en revanche, est le processus d'attachement des écouteurs d'événements et des structures internes de React à HTML rendu côté serveur côté client, transformer un balisage statique en une application entièrement interactive.

Tableau de comparaison:

Facteur Réconciliation par IV
Gâchette Rendu client Chargement initial de la page (SSR)
Interet Mise à jour efficace du DOM Rendre le rendu côté serveur (SSR) HTML interactif
Domaine Comparaison du DOM virtuel Liaison d'événements + rattachement d'état
Fréquence Plusieurs fois Une fois le rendu SSR terminé

Exemple :

Après qu'une application Next.js a envoyé du HTML pré-rendu, React hydrate Cela permet aux composants de réagir aux événements sans avoir à tout redessiner.


23) Comment le rendu concurrent améliore-t-il l'expérience utilisateur dans React 18+ ?

Réponse:

Le rendu concurrent permet à React d'interrompre, de suspendre ou de reprendre le rendu en fonction de la priorité de l'utilisateur. Cela évite le blocage de l'interface utilisateur lors de calculs complexes ou de rendus ultérieurs. Des fonctionnalités telles que useTransition et useDeferredValue exploiter cette capacité pour séparer mises à jour urgentes (comme taper au clavier) à partir de non urgent celles (comme le filtrage).

Avantages:

  • Des interactions fluides et réactives.
  • Découpage du temps pour éviter le blocage du thread principal.
  • Priorisation prévisible pour une meilleure expérience utilisateur.

Exemple :

const [isPending, startTransition] = useTransition();
startTransition(() => setFilteredList(filter(items, term)));

Ici, la saisie reste fluide même lors du filtrage de grands ensembles de données car React planifie les mises à jour non urgentes simultanément.


24) Quelles sont les différentes manières d'effectuer des tests dans les applications React ?

Réponse:

Les tests React peuvent être classés en unité, l'intégrationbauen bout en bout les niveaux.

Tableau des méthodes d'essai :

Type Outil Interet
Unité il y a Tester les fonctions/composants isolés
Intégration : Bibliothèque de tests de réaction Tester les interactions de l'interface utilisateur et les changements d'état
E2E Cypress / Dramaturge Tester les parcours utilisateurs dans de vrais navigateurs

Meilleures pratiques :

  • Préférez Bibliothèque de tests de réaction sur Enzyme (moderne, orienté DOM).
  • API factices utilisant msw (Faux employé de service).
  • Évitez de tester les détails d'implémentation ; concentrez-vous sur le comportement.

Exemple :

test('renders user name', () => {
  render(<User name="Alice" />);
  expect(screen.getByText(/Alice/)).toBeInTheDocument();
});

25) Quels sont les outils de construction et les regroupements les plus couramment utilisés avec React, et quelles sont leurs différences ?

Réponse:

React peut s'intégrer à plusieurs outils de regroupement et de compilation, chacun optimisé pour des cas d'utilisation différents.

Tableau de comparaison:

Outil Caractéristiques Avantages Désavantages
Webpack Hautement configurable Mature et riche en plugins Configuration complexe
Vite Serveur de développement ultra-rapide basé sur ESM HMR instantané, syntaxe moderne Prise en charge limitée des plugins hérités
Colis Configuration nulle Optimisation automatique Less flexible
construire Compilateur basé sur Go Extrêmement vite Moins de plugins d'écosystème

Exemple :

Les projets modernes adoptent souvent Vite pour la vitesse de développement et construire dans les pipelines CI/CD pour des builds de production efficaces.


26) Comment Next.js étend-il les capacités de React ?

Réponse:

Next.js est un Cadre de réaction Elle propose une architecture orientée routage, SSR et génération statique. Elle introduit des modèles de rendu hybrides, des routes API et des fonctionnalités de déploiement prêtes pour l'edge computing.

Avantages :

  • Encastré SSR/SSG/ISR soutien.
  • Routeur d'applications avec les composants serveur React.
  • Optimisation d'image et middleware pour la performance et la sécurité.
  • Routes API simples pour les fonctions sans serveur.

Exemple :

app/page.js pour les pages rendues SSR ; app/api/route.js pour les points de terminaison du serveur.

En résuméNext.js permet de créer des applications React de qualité professionnelle avec une configuration minimale.


27) Quels sont les pièges de performance courants dans React, et comment pouvez-vous les éviter ?

Réponse:

Les principaux pièges liés aux performances de React incluent :

  1. Rendus inutiles — Corriger en utilisant React.memo ou en séparant les composants.
  2. création d'objets/tableaux en ligne - Utilisation useMemo pour des références stables.
  3. Listes longues — Implémenter le fenêtrage (react-window, react-virtualized).
  4. calculs lourds — Mémoriser ou décharger sur des travailleurs Web.
  5. Utilisation excessive du contexte — Les mises à jour fréquentes se propagent en profondeur ; privilégier un état dérivé.

Exemple :

Si tu passes { a: 1 } Intégrée à un composant mémorisé, elle est réaffichée à chaque rendu du parent. Pour résoudre ce problème, mémorisez l'objet.

Tableau des conseils de performance :

Question Technique d'optimisation
Rendus React.memo, useCallback
Calculs coûteux useMemoTravailleurs Web
Grands ensembles de données Virtualisation
Mises à jour fréquentes du contexte État local

28) Expliquez la différence entre useReducer et useState.

Réponse:

Les deux méthodes permettent de gérer l'état, mais elles diffèrent en termes de complexité et de contrôle.

  • useState est idéal pour les transitions d'état simples et isolées.
  • useReducer centralise la logique d'état complexe dans un fonction réductricegrâce à un protocole dispatch actions pour des mises à jour prévisibles.

Tableau de comparaison:

Facteur utiliserÉtat utiliserRéducteur
Syntaxe [value, setValue] [state, dispatch]
Complexité Simple Modéré à complexe
Case Study États indépendants États apparentés ou imbriqués
Débogage Less verbeux Plus facile via les actions enregistrées
Exemple bascules de formulaire Validation de formulaire ou formulaires à plusieurs étapes

Exemple :

const [state, dispatch] = useReducer(reducer, { count: 0 });
dispatch({ type: 'increment' });

29) Comment améliorer l'accessibilité (a11y) dans les applications React ?

Réponse:

L'accessibilité garantit que tous les utilisateurs, y compris ceux en situation de handicap, peuvent utiliser votre application efficacement. React facilite l'accessibilité grâce au balisage sémantique et aux attributs ARIA.

Meilleures pratiques :

  • Utilisez le HTML sémantique (<button> vs <div onClick>).
  • Gérer la concentration à l'aide de ref et tabIndex.
  • Utilisez les rôles ARIA pour les composants dynamiques.
  • Assurez-vous d'un contraste de couleurs et de textes alternatifs pour les images.
  • Tirer parti d'outils comme eslint-plugin-jsx-a11y et noyau de hache pour les audits.

Exemple :

<button aria-label="Close dialog" onClick={closeModal}>×</button>

Avantages :

  • Une plus large portée du public.
  • Amélioration du référencement naturel.
  • Conformité aux normes WCAG.

30) Pouvez-vous décrire en quoi le fractionnement du code et le chargement différé diffèrent, et quand utiliser chacun ?

Réponse:

Les deux techniques optimisent la taille des paquets et les performances de chargement, mais diffèrent par timing d'exécution.

  • Fractionnement de code divise les gros paquets en plus petits morceaux qui peuvent être chargés indépendamment.
  • Chargement paresseux retarde le chargement de ces blocs jusqu'à ce qu'ils soient nécessaires.

Tableau de comparaison:

Facteur Fractionnement de code Chargement Lazy
Définition Divise le code en morceaux Charge les blocs à la demande
Outil Webpack, Vite React.lazydynamique import()
Interet Optimiser la taille du paquet Améliorer les performances d'exécution
Internationaux Temps de construction Runtime

Exemple :

const Settings = React.lazy(() => import('./Settings'));

Utilisées conjointement, ces techniques réduisent le temps d'interaction et améliorent la vitesse perçue des applications volumineuses.


31) Expliquez le concept de Render Props et en quoi il diffère des Higher-Order Components (HOC).

Réponse:

Accessoires de rendu est un modèle dans React où un composant accepte un fonction en tant qu'accessoire Cela lui indique ce qu'il doit afficher. Cela permet de partager la logique des composants entre plusieurs composants sans duplication.

Les HOC, en revanche, envelopper un composant et renvoyer une version améliorée avec des propriétés ou des comportements injectés.

Tableau de comparaison:

Facteur Accessoires de rendu HOC
Mise en œuvre Fonctionner comme un enfant Composant d'encapsulation de fonction
Composition Contrôle en ligne Enveloppe déclarative
lisibilité Souvent plus clair Peut provoquer un véritable enfer d'emballage
Case Study logique de rendu dynamique Préoccupations transversales

Exemple :

<DataProvider render={data => <UserList users={data} />} />

Les Render Props offrent une meilleure flexibilité et évitent les conflits de noms fréquents dans les HOC.


32) Quels sont les différents types de crochets personnalisés et leurs avantages ?

Réponse:

Les hooks personnalisés encapsulent une logique réutilisable combinant état, effets de bord et utilitaires. Ils améliorent la réutilisabilité du code, la séparation des préoccupations et la testabilité.

Types et exemples :

  1. Points d'ancrage de gestion d'état - useToggle, useForm.
  2. Points d'accroche pour la récupération de données - useFetch, useQuery.
  3. Crochets d'interface utilisateur/d'expérience utilisateur - useWindowSize, useDarkMode.
  4. crochets d'intégration - useLocalStorage, useMediaQuery.
  5. Crochets de performance - useDebounce, useThrottle.

Avantages :

  • Réutilisation de la logique centralisée.
  • Des composants plus propres.
  • Tests indépendants.

Exemple :

function useLocalStorage(key, initial) {
  const [value, setValue] = useState(() => JSON.parse(localStorage.getItem(key)) || initial);
  useEffect(() => localStorage.setItem(key, JSON.stringify(value)), [value]);
  return [value, setValue];
}

33) Comment gérez-vous les fuites de mémoire dans les applications React ?

Réponse:

Les fuites de mémoire surviennent lorsque des composants non montés conservent des références à des ressources ou à des abonnements. Elles dégradent les performances et provoquent un comportement imprévisible.

Techniques de prévention :

  1. Effets de nettoyage in useEffect: useEffect(() => { const id = setInterval(logData, 1000); return () => clearInterval(id); }, []);
  2. Interrompre les appels asynchrones grâce à AbortController.
  3. Évitez de conserver les bouchons périmés. référence aux anciennes propriétés/état.
  4. Se désabonner des événements ou des sockets au démontage.
  5. Utiliser React Profiler pour détecter une croissance lente de la mémoire.

Exemple :

Dans une application de chat, déconnectez toujours les écouteurs de socket lorsqu'un utilisateur quitte la salle de chat.


34) Quelles sont les meilleures pratiques pour la gestion des formulaires dans les grandes applications React ?

Réponse:

La gestion des formulaires dans les applications React à l'échelle de l'entreprise nécessite un équilibre entre contrôle, performance et maintenabilité.

Meilleures pratiques :

  • Utilisez des bibliothèques comme Formulaire, Forme de crochet de réaction, ou Forme définitive pour la validation et l'enregistrement sur le terrain.
  • Regroupez les champs associés à l'aide de composants ou de contextes imbriqués.
  • Appliquer validation de schéma (Oui, Zod) par souci de cohérence.
  • Éliminer les rebonds liés aux validations lourdes ou aux contrôles d'API.
  • Conserver l'état du formulaire localisé, sauf si nécessaire au niveau global.

Exemple :

React Hook Form minimise les rendus en isolant l'état des entrées.

const { register, handleSubmit } = useForm(); 
<input {...register('email', { required: true })} />

35) Quels modèles de conception sont les plus utiles dans le développement React, et quelles sont leurs caractéristiques ?

Réponse:

React se prête naturellement à plusieurs modèles de conception logicielle pour une architecture d'interface utilisateur maintenable et évolutive.

Patron de Couture Description Exemple
Présentateur de conteneur Séparer la logique (conteneur) de l'interface utilisateur (présentateur) DataContainer → UIComponent
Contrôlé-Non contrôlé Gérer les données de formulaire via l'état ou le DOM Formik contre entrées brutes
Composants composés Les parents contrôlent la composition de l'enfant <Tabs><Tab /></Tabs>
Modèle de fournisseur Partager l'état via le contexte Fournisseur de thèmes
Modèle de crochets Réutiliser la logique avec état useAuth, useFetch

Exemple :

A Tabs Le composant expose donc le contexte. <Tab> Les enfants s'inscrivent automatiquement — une application propre de Composant composé motif.


36) Quelles sont les principales différences entre React 18 et React 19 ?

Réponse:

React 19 s'appuie sur les bases de la concurrence de React 18 et y ajoute d'importantes nouvelles fonctionnalités.

Fonctionnalité Réagir 18 Réagir 19
Rendu simultané Introduit Amélioré grâce à un suspense accru
Composants du serveur Expérimental Stabilisé et intégré
API Actions Indisponible Nouvelle norme pour la gestion des actions de formulaire
Chargement des actifs Manuel (Le français commence à la page neuf) Chargement automatique des ressources
Amélioration de la gestion des erreurs Basic Granulaire avec crochets de délimitation

Principaux avantages:

React 19 se concentre sur mutations de données plus simples, actions de formulaire intégréesbauen contrôle asynchrone amélioré, rendant ainsi l'hydratation progressive et la SSR plus fluides.


37) Comment fonctionne le micro-frontend ArchiComment la technologie s'intègre-t-elle à React ? Quels sont ses avantages ?

Réponse:

Les micro-frontends divisent une application web de grande taille en modules front-end indépendants et déployables. Dans un écosystème React, chaque micro-frontend est une application autonome qui peut être intégrée via Fédération de modules, iframes, ou chargeurs d'exécution personnalisés.

Avantages :

  • Déploiement et mise à l'échelle indépendants.
  • Autonomie des équipes concernant les différentes technologies utilisées.
  • Des pipelines de construction plus rapides.

Exemple :

L'utilisation de Fédération de modules WebpackLes équipes peuvent ainsi exposer dynamiquement des composants React dans différentes applications :

exposes: { './NavBar': './src/NavBar' }

Inconvénients :

  • Complexité de la gestion d'état partagé.
  • Surcharge de performances due aux ensembles isolés.

38) Quels sont les facteurs que vous prenez en compte pour la mise à l'échelle d'une application React en production ?

Réponse:

La mise à l'échelle des applications React implique des considérations techniques, architecturales et opérationnelles.

Facteurs clés :

  1. Structure du code — Adopter les monorepos (Nx/Turborepo) pour le partage modulaire du code.
  2. Gestion de l'État — segmenter les états locaux, globaux et serveur.
  3. Performances — chargement différé, mémorisation, mise en cache CDN.
  4. Le Monitoring — Utilisez Sentry, Datadog ou LogRocket pour les erreurs et les métriques.
  5. Tests et CI/CD — pipelines automatisés et tests de régression visuelle.

Exemple :

Une grande plateforme de commerce électronique fait évoluer des applications React en utilisant Next.js pour le rendu côté serveur (SSR), Redux Toolkit pour un état prévisible et des micro-frontends pour des secteurs verticaux isolés.


39) Comment tester les composants React qui utilisent un comportement asynchrone ?

Réponse:

Tester les composants React asynchrones nécessite une synchronisation entre l'exécuteur de tests et les mises à jour d'état du composant.

Meilleures pratiques :

  • Utilisez le waitFor or findBy* requêtes dans la bibliothèque de tests React.
  • Simuler les appels de récupération ou les API en utilisant msw.
  • Préférez faux minuteurs (jest.useFakeTimers()) pour les effets basés sur le délai d'expiration.

Exemple :

test('loads and displays data', async () => {
  render(<UserList />);
  expect(await screen.findByText('Alice')).toBeInTheDocument();
});

Cela garantit que le test attend les mises à jour asynchrones de React avant de faire des assertions.


40) Expliquez comment vous concevriez une structure de projet React à grande échelle et maintenable.

Réponse:

Un projet React évolutif doit trouver un équilibre entre modularité, clarté et collaboration d'équipe.

Structure de dossiers recommandée :

src/
 ├── components/         # Reusable UI elements
 ├── features/           # Feature-specific modules
 ├── hooks/              # Custom reusable hooks
 ├── context/            # Global providers
 ├── pages/              # Route-level views
 ├── services/           # API and utilities
 ├── assets/             # Static resources
 ├── tests/              # Unit & integration tests
 └── index.js

Meilleures pratiques :

  • Utilisez les importations absolues avec des alias de chemin.
  • Maintenir un contrôle de sécurité strict (ESLint + Prettier).
  • Utilisez le TypeScript pour des raisons de sécurité.
  • Appliquez les limites des composants grâce à une conception atomique ou à un découpage basé sur les fonctionnalités.

Exemple :

Dans un contexte réel, une fonctionnalité « Utilisateur » pourrait inclure UserSlice.js, UserAPI.js, UserCard.jsxbauen User.test.js, tout à l'intérieur src/features/user/.


🔍 Questions d'entretien React.js les plus fréquentes, avec des scénarios concrets et des réponses stratégiques

1) Quelles sont les principales différences entre les composants fonctionnels et les composants de classe dans React.js ?

Attendu du candidat : L'intervieweur souhaite tester votre compréhension de l'architecture des composants React et des meilleures pratiques modernes.

Exemple de réponse:

Les composants fonctionnels sont plus simples et s'appuient sur des hooks pour gérer l'état et les méthodes de cycle de vie, tandis que les composants de classe utilisent this et les méthodes de cycle de vie comme componentDidMount« Les composants fonctionnels sont généralement préférés aujourd'hui car ils favorisent un code plus propre, sont plus faciles à tester et offrent de meilleures performances grâce aux optimisations du processus de rendu de React. »


2) Pouvez-vous expliquer comment fonctionne le DOM virtuel dans React ?

Attendu du candidat : L'intervieweur souhaite évaluer votre compréhension du mécanisme de performance principal de React.

Exemple de réponse:

« Le DOM virtuel est une représentation en mémoire du DOM réel. Lorsqu'un composant change d'état, React met d'abord à jour le DOM virtuel, le compare à la version précédente grâce à un processus appelé « diffing », puis met à jour uniquement les parties du DOM réel qui ont changé. Cette approche améliore les performances en minimisant la manipulation directe du DOM. »


3) Comment gérer l'état dans une application React à grande échelle ?

Attendu du candidat : L'intervieweur souhaite en savoir plus sur votre expérience en matière de techniques et d'outils de gestion d'État.

Exemple de réponse:

« Pour les applications de grande envergure, j’utilise généralement des bibliothèques de gestion d’état centralisées telles que Redux ou Zustand. Redux assure un flux de données prévisible et facilite le débogage grâce à des outils de suivi temporel. Pour les applications plus simples, je privilégie l’API Context et les hooks afin d’éviter toute complexité inutile. »


4) Décrivez une situation où vous avez optimisé les performances de React.

Attendu du candidat : Le recruteur souhaite comprendre votre expérience pratique en matière d'optimisation des performances.

Exemple de réponse:

« Dans mon poste précédent, notre application se réaffichait excessivement en raison de changements d'état inutiles. J'utilisais React.memo et la useCallback J'ai utilisé un hook pour éviter les rendus inutiles. J'ai également analysé les performances à l'aide de React Profiler et identifié les composants nécessitant une mémorisation, ce qui a réduit le temps de rendu de près de 30 %.


5) Comment gérez-vous les effets secondaires dans React ?

Attendu du candidat : L'intervieweur souhaite évaluer votre compréhension des hooks et de la gestion du cycle de vie.

Exemple de réponse:

« Je gère les effets secondaires tels que les appels d'API ou les manipulations du DOM à l'aide de useEffect Le hook me permet de spécifier les dépendances, garantissant ainsi que l'effet ne s'exécute que lorsque ces dépendances changent. Cela contribue à maintenir un comportement prévisible et à éviter les boucles infinies.


6) Parlez-moi d'un bug difficile que vous avez rencontré dans un projet React et comment vous l'avez résolu.

Attendu du candidat : L'intervieweur souhaite évaluer vos compétences en matière de résolution de problèmes et de débogage.

Exemple de réponse:

« À mon poste précédent, j’ai rencontré un bug : les mises à jour d’état n’étaient pas reflétées dans l’interface utilisateur. Après investigation, j’ai réalisé que le problème était dû à la modification directe de l’objet d’état au lieu de la création d’une nouvelle copie. J’ai remanié le code pour utiliser des mises à jour immuables, ce qui a résolu le problème et amélioré la cohérence des données. »


7) Comment gérez-vous la validation des formulaires dans les applications React ?

Attendu du candidat : L'intervieweur souhaite vérifier si vous comprenez comment mettre en œuvre la validation des entrées utilisateur.

Exemple de réponse:

« J’utilise généralement des composants contrôlés pour gérer les entrées de formulaire, associés à des bibliothèques comme Formik ou React Hook Form pour la validation. Ces outils simplifient la gestion des erreurs, la gestion de l’état du formulaire et l’intégration avec des bibliothèques de validation tierces telles que Yup. »


8) Décrivez une situation où vous avez dû collaborer avec des développeurs backend lors du travail sur un projet React.

Attendu du candidat : Le recruteur souhaite évaluer vos compétences en matière de travail d'équipe et de communication.

Exemple de réponse:

« Dans mon poste précédent, j’ai collaboré étroitement avec les développeurs back-end pour concevoir des API REST pour une application de tableau de bord. Nous nous sommes mis d’accord sur les formats de données et les points de terminaison dès les premières phases de développement. J’ai également créé des réponses de test pour permettre la poursuite du développement front-end pendant la construction du back-end, garantissant ainsi une intégration fluide par la suite. »


9) Comment vous assurez-vous que vos composants React sont réutilisables et maintenables ?

Attendu du candidat : L'intervieweur souhaite en savoir plus sur votre approche de la conception des composants et de leur évolutivité.

Exemple de réponse:

« Je privilégie la création de petits composants ciblés, chacun ayant une seule responsabilité. J'utilise également les props pour plus de flexibilité et je maintiens un style modulaire grâce au CSS-in-JS ou à styled-components. Cela garantit une réutilisation et une maintenance aisées des composants tout au long du projet. »


10) Comment vous tenez-vous au courant des tendances et des meilleures pratiques en matière de React.js ?

Attendu du candidat : Le recruteur souhaite évaluer votre engagement envers la formation continue.

Exemple de réponse:

« Je me tiens au courant en suivant la documentation officielle de React et les blogs de la communauté. Je regarde également des conférences React comme React Conf et j'écoute des podcasts comme « React Podcast ». Ces ressources me permettent de rester informé des nouvelles fonctionnalités telles que le rendu concurrent et les composants serveur. »

Résumez cet article avec :