Académique Documents
Professionnel Documents
Culture Documents
Dans le chapitre précédent, vous avez appris à créer votre premier composant, et à l’utiliser
dans un fichier HTML que vous avez transformé en app React. Déjà, bravo ! 🥳
Il est maintenant temps de nous pencher un peu plus sur les composants.
Pensez en composants
Bon, ça ne fait que deux chapitres, et vous avez déjà entendu 20 fois le mot “composant” (si
si, j’ai compté 🤓). Vous l’aurez compris : les composants sont essentiels dans React.
Une interface est toujours constituée de différents éléments : des boutons, des listes, des titres,
des sous-titres. Une fois rassemblés, ces éléments constituent une interface utilisateur ou UI.
Si je prends l’exemple de la maquette de notre site de plantes, vous voyez la barre de menu, le
panier, et que pour chaque article, il y a un nom, une photo, une description.
Les composants nous permettent d’utiliser la même structure de données, et de remplir ces
structures avec différents jeux de données. Peu importe le nombre de plantes que vous aurez à
mettre dans La maison jungle, vous pourrez les exploiter pour afficher vos données sans
aucun effort. Et si dans le futur, vous avez besoin de créer une nouvelle page avec la même
présentation, vous pourrez réutiliser le même composant : vous vous rendez compte de la
puissance des composants ? 💥
C’est donc la mission des développeurs et développeuses React de découper toute interface
utilisateur en éléments réutilisables, imbriqués les uns dans les autres. La majorité de nos
composants sont eux-mêmes créés en combinant d’autres composants plus simples.
Comprenez de quoi un composant est fait
Super ! C’est vraiment puissant les composants ! Il suffit d’écrire dans la bonne syntaxe et….
magie ! On a une interface utilisateur ? 🧐
Alors... non, vous ne me verrez pas dire ça. Derrière chaque technologie, il y a une logique.
Vous savez que le HTML est une suite d’instructions que le navigateur doit suivre pour
construire le DOM. Eh bien, React vient directement modifier le DOM pour vous : il suffit
juste de lui donner les instructions de ce que vous souhaitez faire.
Pour faire simple : en utilisant React.createElement , React crée d’abord ses éléments dans le
DOM virtuel, puis il vient prévenir le DOM au moment de sa création, “Hé, rajoute-moi une
balise h1 avec le texte La maison jungle dedans”.
Je vous ai traduit le composant du chapitre précédent dans le CodePen ici. En faisant
un console.log de votre composant, voilà ce que vous obtenez :
Vous avez découvert que les éléments renvoient des objets avec tout un ensemble de
propriétés spécifiques, et que React vient les créer avec createElement. Mais vous vous doutez
que les développeurs React ne manipulent pas ces objets directement. Non, à la place, ils
utilisent le JSX.
Il s’agit de l'extension JavaScript créée par React, qui permet d’utiliser notre syntaxe sous
forme de tags directement dans le code JavaScript.
Lorsqu’on a ça :
function Header() {
return (<div>
... et qu’on le réutilise avec <Header /> , on pourrait croire qu’il s’agit de HTML. Ça a un peu
la même tête, mais il s’agit de JSX ! Eh oui, JSX est la manière la plus compréhensible
d’écrire des composants React dans une application, et donc la manière qui est quasiment
toujours utilisée. Il s'agit d'ailleurs de la spécificité de React : contrairement aux autres
frameworks où on écrit du HTML enrichi, les équipes de React ont créé le JSX, leur propre
syntaxe basée sur JavaScript, qui permet de mêler HTML et JS.
Comme le HTML, le JSX est un langage à balises. Les touches <, > et / de vos claviers vont
donc être très souvent utilisées.
On a bien créé un composant Header et pas header. Il est essentiel de mettre une majuscule
à nos composants JSX, sinon React ne saura pas qu'il s'agit d'un composant, et pensera qu'il
s'agit juste d'une balise HTML.
Composez vos composants
Reprenons notre composant <Header />. Il est un peu tout seul, vous ne trouvez pas ?
On va lui ajouter un composant <Description /> :
function Description() {
return (<p>Ici achetez toutes les plantes dont vous avez toujours rêvé 🌵🌱🎍</p>)
Quoi ?! Rien ne s’affiche sauf un petit point d’exclamation entouré de rouge : il y a une erreur
! 😤
Pas de panique, c’est normal : deux composants doivent toujours être wrappés dans un seul
composant parent.
Nos éléments sont bien wrappés, et si vous inspectez votre page, ce parent n'apparaît pas dans
le DOM.
Comme je vous l’ai expliqué, le propre de React est de nous encourager à réutiliser nos
composants. On va donc structurer notre interface en arborescences de composants.
function Banner() {
return (<div>
<Header />
<Description />
</div>)
Et nous pourrions également les encapsuler, et les utiliser autant de fois que nous le
souhaitons comme ci-dessous :
<Parent>
<Enfant />
<Enfant />
<Enfant />
</Parent>
Vous remarquez d'ailleurs que tous nos composants sont bien fermés. En JSX, toutes les
balises doivent être fermées, y compris les éléments HTML autofermants tels que input. On
l'écrira de cette manière (en lui ajoutant les attributs souhaités) :
<input />
En React, les accolades { et } sont également particulièrement utiles. Dès qu'il s'agit
d'expressions JavaScript, elles sont écrites entre accolades.
Ça nous permet d'appliquer des expressions JavaScript directement dans notre JSX pour :
utiliser des ternaires :
<div>{ 2 > 0 ? 'Deux est plus grand que zéro' : 'Ceci n'apparaîtra jamais }</div>}
Ou même tout simplement pour afficher une variable JS :
function Description() {
const text = "Ici achetez toutes les plantes dont vous avez toujours rêvé"
function Description() {
const text = "Ici achetez toutes les plantes dont vous avez toujours rêvées"
const emojis = "🤑🤑🤑"
Bon, je ne suis pas sûre que ce soit un super argument commercial, mais vous voyez l'idée ?
Exercez-vous
Vous avez appris plein de choses dans ce chapitre, bravo ! C'est maintenant l'occasion de les
mettre en pratique.
Vous trouverez ici le lien CodePen pour commencer l'exercice. Voilà ce qui est attendu de
vous :
En résumé
Vous êtes venu à bout de ce chapitre sur les composants en JSX ! Bravo à vous. 😎
Maintenant vous savez que :