React
Debutant
Quiz-React-Debutant
React-Composants
React-Props
React-State
React-Jsx
React-Routing
Questions-Entretien-React
Qcm-React
Apprendre-React
Cycle-De-Vie-React
Javascript
Front-End
📝
Entretien React Débutant — Composants, Props et State
20 questions sur les bases de React : composants, props et state. Idéal pour préparer un entretien développeur React débutant.
Banque de révision : les 20 questions corrigées
Voici l'intégralité des 20 questions de « Entretien React Débutant — Composants, Props et State », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.
Explication :
Avec Vite (recommandé depuis 2023), on utilise
npm create vite@latest my-app -- --template react. create-react-app est l'ancienne méthode, désormais en maintenance.
Vite offre un démarrage quasi-instantané et un HMR (Hot Module Replacement) ultra-rapide comparé à CRA.
Explication :
JSX (JavaScript XML) est une extension syntaxique de JavaScript qui ressemble au HTML. Il permet de décrire l'UI de manière déclarative. Sous le capot, JSX est compilé en appels à
React.createElement().
JSX n'est pas du HTML valide : utilisez
className au lieu de class, et htmlFor au lieu de for.
Explication :
Dans JSX, on utilise les accolades
{} pour évaluer une expression JavaScript et afficher son résultat. Exemple : <h1>Bonjour {prenom}</h1>.
Toute expression JavaScript valide fonctionne entre accolades :
{a + b}, {user.name.toUpperCase()}, {condition ? "oui" : "non"}.
Explication :
Un composant fonctionnel est une simple fonction JavaScript qui accepte des
props en argument et retourne du JSX. C'est la façon moderne et recommandée d'écrire des composants React.
Avec les hooks, les composants fonctionnels peuvent gérer l'état local et les effets de bord, rendant les composants classes obsolètes.
Explication :
Les
props (propriétés) sont des données en lecture seule passées du composant parent vers le composant enfant. Elles permettent de rendre les composants réutilisables avec des données différentes.
Les props sont immutables : un composant ne doit jamais modifier ses propres props.
Explication :
useState est le hook fondamental pour ajouter un état local à un composant fonctionnel. Il retourne un tableau [valeur, fonctionDeMiseÀJour]. Exemple : const [count, setCount] = useState(0).
La fonction de mise à jour peut accepter une fonction callback pour se baser sur l'état précédent :
setCount(prev => prev + 1).
Explication :
En JSX, les événements s'écrivent en camelCase :
onClick, onChange, onSubmit. On passe une référence de fonction (pas un appel) : onClick={handleClick}.
Si vous devez passer un argument, utilisez une arrow function :
onClick={() => handleClick(id)}. Attention à ne pas créer de nouvelle fonction à chaque rendu si possible.
Explication :
On utilise la méthode JavaScript
.map() sur un tableau pour générer des éléments JSX. Chaque élément doit avoir une prop key unique et stable (pas l'index du tableau si l'ordre peut changer).
La clé (key) aide React à identifier les éléments modifiés, ajoutés ou supprimés pour optimiser le rendu.
Explication :
useEffect permet d'exécuter du code après le rendu : appels API, souscriptions à des événements, manipulation du DOM, etc. Il remplace les méthodes de cycle de vie des composants classes.
Le tableau de dépendances (2e argument) contrôle quand l'effet s'exécute : vide
[] = au montage uniquement, avec variables = quand elles changent.
Explication :
Dans un composant contrôlé, la valeur de l'input est liée à un state React :
value={text} et onChange={(e) => setText(e.target.value)}. C'est React qui est la source de vérité.
Les composants contrôlés offrent plus de contrôle sur les données du formulaire (validation instantanée, formatage, etc.).
Explication :
Le Virtual DOM est une copie légère du DOM réel conservée en mémoire. Quand l'état change, React crée un nouveau Virtual DOM, le compare avec l'ancien (diffing), puis met à jour uniquement les parties modifiées du DOM réel (reconciliation).
Cette approche rend React très performant car les manipulations directes du DOM réel sont coûteuses.
Explication :
Les Fragments (
<>...</> ou <React.Fragment>) permettent de grouper des éléments sans ajouter de nœud supplémentaire au DOM. C'est utile pour ne pas casser les mises en page CSS.
La syntaxe courte
<></> ne supporte pas les attributs. Si vous avez besoin d'une key, utilisez <React.Fragment key={...}>.
Explication :
En JSX, l'attribut
class HTML s'écrit className. On peut utiliser des expressions JavaScript ternaires ou la librairie clsx/classnames pour des cas complexes.
Avec clsx :
className={clsx("btn", { "btn-primary": isPrimary, "btn-disabled": isDisabled })}. C'est très pratique pour gérer plusieurs classes conditionnelles.
Explication :
Les deux syntaxes sont valides.
children est une prop spéciale qui contient le contenu entre les balises du composant : <Card><p>Texte</p></Card>. On peut l'accéder via props.children ou le destructuring.
Les children peuvent être n'importe quel nœud React valide : chaîne, élément, tableau, fonction (render props), etc.
Explication :
Le rendu conditionnel permet d'afficher différents contenus selon l'état ou les props. Les techniques courantes : opérateur ternaire
{condition ? <A /> : <B />}, court-circuit {condition && <A />}, ou if/else avant le return.
Attention au court-circuit avec des valeurs falsy comme
0 : {count && <p>{count}</p>} affichera 0 si count vaut 0. Utilisez {count > 0 && ...}.
Explication :
useMemo mémorise le résultat d'un calcul coûteux entre les rendus. Il ne recalcule que si ses dépendances changent. Exemple : const sortedList = useMemo(() => items.sort(), [items]).
N'utilisez pas useMemo pour toutes les valeurs : réservez-le pour les calculs vraiment coûteux. Une optimisation prématurée peut nuire à la lisibilité.
Explication :
Le tableau de dépendances (2e argument) indique quand l'effet doit être réexécuté.
[] = uniquement au montage. [dep1, dep2] = quand ces valeurs changent. Sans tableau, l'effet s'exécute après chaque rendu.
La fonction de nettoyage retournée par useEffect s'exécute avant la prochaine exécution de l'effet ou au démontage du composant.
Explication :
La prop
key est obligatoire pour chaque élément d'une liste générée dynamiquement. Elle doit être unique et stable (un ID de données idéalement, pas l'index si la liste peut être réordonnée).
Une mauvaise gestion des clés peut causer des bugs d'état (state) car React utilise les clés pour associer chaque élément à son état.
Explication :
Dans un composant contrôlé, React est la "source de vérité" : la valeur de l'input est stockée dans un state et mise à jour via onChange. Dans un composant non contrôlé, le DOM gère l'état et on y accède via une ref.
Les composants contrôlés sont recommandés pour la plupart des formulaires car ils offrent un contrôle total sur les données.
Explication :
On utilise
useEffect avec un tableau vide [] comme dépendances pour que l'appel API ne se fasse qu'une fois, au montage du composant. Exemple : useEffect(() => { fetchData() }, []).
N'oubliez pas de gérer l'état de chargement (loading) et les erreurs :
useState pour loading/error/data. Voir aussi React Query/TanStack Query pour une gestion avancée.