Premier composant React

4 min de lecture

Rentrons maintenant dans le vif du sujet en créant notre premier composant React !
Dans cet article, on va faire un composant trĂšs simple : un dumb component qui sera tout simplement un bouton.

Un... Dumb component ?

Un dumb component est un composant React qui ne contient pas de logique.
Enfin si, il peut en contenir (mais rien de foufou), son rÎle est de simplement afficher des données.

En gros :

  • Il ne fait que de l'affichage
  • Il ne fait pas de calculs
  • Il ne fait pas de requĂȘtes HTTP

⚙ Syntaxes pour crĂ©er un composant

Il existe plusieurs façons de créer un composant React.

La plus simple est de créer une fonction qui retourne du JSX, mais il est aussi possible de créer une classe qui hérite React.Component.

Cependant, on ne va pas s'attarder sur la déclaration de composants dans des classes.

Pourquoi ? DĂ©jĂ  parce que la documentation officielle recommande dĂ©sormais de dĂ©finir des composants en tant que fonctions, mais surtout parce que c'est plus simple et plus lisible ! 🚀

đŸ‘· CrĂ©ation du composant

Allez c'est parti, occupons-nous de notre premier composant React !

import React from "react";

export function Button() {
  return <button>Click me</button>;
}

... et c'est tout ! 🎉
On a créé notre premier composant React, c'est pas beau ça ?

Bon Ă©videmment, il reste extrĂȘmement sommaire et n'a pas d'intĂ©rĂȘt Ă  l'heure actuelle, mais c'est un bon dĂ©but !

Avant d'aller plus loin, décortiquons un peu ce code :

  • On importe React depuis la bibliothĂšque React (ligne 1)
  • On crĂ©e une fonction Button (lignes 3 Ă  5)
    • Cette fonction retourne un Ă©lĂ©ment JSX <button>Click me</button>

đŸ§© Utilisation du composant

C'est bien beau d'avoir un composant, mais maintenant il faut l'utiliser !

import { Button } from "./Button";
import React from "react";

export function App() {
  return (
    <div>
      <h1>Mon premier composant React</h1>
      <Button />
    </div>
  );
}

On importe notre composant Button (ligne 3) et on l'utilise dans notre composant App (ligne 9).

Rien de bien sorcier, n'est-ce pas ? 😊

Mais maintenant, on va vouloir donner un peu plus de vie Ă  notre bouton...
Parce que là pour le coup, il est inutile. 😅

📩 Props

Les props (pour properties) sont des arguments que l'on peut passer Ă  un composant React.
Il s'agit en quelque sorte des paramĂštres d'une fonction.

Imaginons ici que l'on veut rajouter :

  • Un texte au bouton
  • Une action Ă  effectuer lorsqu'on clique dessus

Avant de t'expliquer comment faire, je vais te montrer ce que ça donne pour son utilisation :

import { Button } from "./Button";
import React from "react";

export function App() {
  function handleClick() {
    console.log("Je suis cliqué !");
  }

  return (
    <div>
      <h1>Mon premier composant React</h1>
      <Button onClick={handleClick} />
    </div>
  );
}

Voyons un peu ce qui change !

  • Fonction handleClick qui affiche un message dans la console (ligne 6)
  • On passe la fonction handleClick en tant que prop onClick Ă  notre composant Button (ligne 11)
  • On passe le texte Clique-moi ! entre la balise ouvrante et fermante de notre composant Button (ligne 12)

Mais alors, comment on fait pour récupérer ces props dans notre composant Button ?

import React from "react";

export function Button(props) {
  return <button onClick={props.onClick}>{props.children}</button>;
}

Comme tu peux voir, on récupÚre les props passées à notre composant Button en tant que paramÚtre de la fonction.

Mais tu peux Ă©galement remarquer qu'il y a une propriĂ©tĂ© children qui n'est pas passĂ©e de la mĂȘme maniĂšre que onClick.

C'est totalement normal ! children est une prop spéciale qui contient tout ce qui se trouve entre les balises ouvrante et fermante du composant.

Le JavaScript inline, c'est pas bien !

Tu as totalement raison ! On recommande effectivement de ne pas faire du JS inline dans notre HTML et de privilégier un fichier distinct pour notre JavaScript.
Et donc tu sais dĂ©jĂ  qu'on va prĂ©fĂ©rer l'utilisation des addEventListener 😏

... cependant ici, on ne fait pas du HTML mais du JSX, et c'est une autre histoire !

đŸ–‡ïž Les diffĂ©rentes props

Il existe plusieurs props que l'on peut passer Ă  un composant React :

  • children : Contient tout ce qui se trouve entre les balises ouvrante et fermante du composant
  • Les autres props : Tout ce qui est passĂ© en dehors des balises ouvrante et fermante du composant

Alors évidemment, cette explication est trÚs réductrice, mais on va s'en contenter pour le moment.

Mais tu te doutes bien qu'il existe des props spĂ©cifiques Ă  certains Ă©lĂ©ments HTML qui peuvent ĂȘtre passĂ©es Ă  un composant React.

🔒 Mots clĂ©s protĂ©gĂ©s

En HTML, il existe des attributs qui sont utilisés dans certains éléments HTML. Cependant, comme ici on ne fait pas du HTML mais du JSX, on ne va pas pouvoir les utiliser tels quels.

Pour te donner un exemple concret, si tu veux ajouter une classe CSS à un élément, tu ne pourras pas utiliser l'attribut class mais className.

Mais alors, pourquoi ?

Comme le JSX reste avant tout du JavaScript, on ne peut pas utiliser des mots-clés réservés comme class, for, default, etc.

Plus d'informations sur les mots-clés protégés

React comprendra ces mots clés au sein des composants, cependant il va générer un avertissement dans la console du navigateur pour te prévenir que tu utilises un mot-clé protégé qui est "ambigu".

Cependant, certaines bibliothĂšques qui utilisent le JSX, comme SolidJS par exemple, utilisent ces mots-clĂ©s protĂ©gĂ©s au sein des composants. Ca ne veut pas dire que c'est "bien" ou "pas bien", mais qu'il faut ĂȘtre conscient de ce que l'on fait et de comment est interprĂ©tĂ© notre code par la bibliothĂšque 😉

On va donc utiliser des noms d'attributs qui sont similaires à ceux du HTML, mais qui sont adaptés pour le JSX.

  • class devient className (pour les classes CSS)
  • for devient htmlFor (pour les labels)
  • default devient defaultValue (pour les champs de formulaire)

Et il en existe bien d'autres, mais on va s'arrĂȘter lĂ  pour le moment ! 😊

👂 Écouteurs d'Ă©vĂ©nements

Il existe également des attributs spécifiques pour les écouteurs d'événements.
Tu as notamment pu déjà faire la rencontre de onClick, mais il en existe bien d'autres !

Il s'agit de la syntaxe Ă  adopter avec React pour ajouter des Ă©couteurs d'Ă©vĂ©nements Ă  des composants JSX, et non pas d'utiliser addEventListener directement dans le JavaScript 😉

J'aimerai beaucoup pouvoir te donner une liste d'exemples d'écouteurs d'événements, mais il y en a tellement que je ne pourrais pas tous les citer ici.
La forme Ă©tant toujours la mĂȘme, tu peux facilement savoir comment les Ă©crire !

La forme est simple :

  • PrĂ©fixe : on
  • ÉvĂ©nement : nom de l'Ă©vĂ©nement en camelCase

Par exemple :

  • click => onClick
  • change => onChange
  • submit => onSubmit
  • mouseenter => onMouseEnter
  • mouseleave => onMouseLeave

Et si tu cherches une liste complÚte des écouteurs d'événements, je t'invite à tout simplement consulter le MDN Web Docs qui est une mine d'or pour tout ce qui est lié au développement web !

Au début, on peut trouver ça un peu déroutant puisqu'on va naturellement les associer à du HTML, mais il faut se rappeler qu'on est dans du JSX (oui, j'insiste beaucoup là-dessus !).

Conclusion

Et voilà, on a créé notre premier composant React !
On a mĂȘme rapidement vu comment passer des props Ă  un composant et comment les rĂ©cupĂ©rer.

Et si pour le prochain article, on parle un peu des states pour rajouter un peu d'intéractivité à nos composants ?
Parce que c'est dĂ©jĂ  cool ce qu'on a pu faire, mais on peut faire tellement plus avec React ! 🚀

Précédent

Front-endSyntaxe JSX

DerniĂšres documentations

Introduction Ă  JavaScript

DerniĂšre modification :

Parlons un peu de JavaScript, le langage de programmation incontournable pour le développement web.

La syntaxe de base de JavaScript

DerniĂšre modification :

Découvrons ensemble la syntaxe de base de JavaScript et comment il fonctionne dans le navigateur.

Memento DevMemento Dev

Plateforme de ressources et documentations synthĂ©tiques et concises, conçue pour les dĂ©veloppeurs ou passionnĂ©s de l‘informatique en quĂȘte de savoir.


© 2022 - 2025 Memento Dev. Tous droits rĂ©servĂ©s

Memento Dev est une plateforme open-source, développée par Gauthier Daniels, soutenue et maintenue par une communauté de contributeurs passionnés.