La syntaxe JSX de React

3 min de lecture

Avant de commencer à parler des composants React, découvrons tranquillement la syntaxe JSX.

Le JSX est un sucre syntaxique (une syntaxe plus lisible et plus simple que le JavaScript pur) qui permet de décrire l'interface utilisateur (UI) de notre application.

Le sigle en lui-même signifie JavaScript XML, dans le sens où l'on va retrouver une syntaxe proche du XML (eXtensible Markup Language) qui est un langage de balisage (comme le HTML).

🔍 Différences entre HTML et JSX

Et oui, le JSX ressemble beaucoup au HTML et c'est normal !
C'est l'objectif premier de React : rendre la création d'interfaces utilisateur (UI) plus simple et plus intuitive.

Cependant il ne faut pas oublier que le JSX n'est pas du HTML, mais du JavaScript.

Pour faire plus simple, voici un élément HTML et son équivalent avec React (avec et sans JSX) :

<button class="button">Clique moi !</button>

Comme tu peux le constater, la différence entre le JSX et le HTML est minime.
Il y a toutefois des différences, comme certains mots réservés (comme class qui devient className) ou encore la manière de déclarer des événements (comme onclick qui devient onClick).

Par contre si on regarde la différence entre le JSX et le JavaScript pur (en utilisant React quand même), on voit bien que le JSX est beaucoup plus lisible et plus simple à écrire.

Là où c'est encore plus flagrant, c'est quand on commence à imbriquer des éléments (comme des composants React par exemple) !

React.createElement(
  React.Fragment,
  null,
  React.createElement("h2", null, "Formulaire de contact"),
  React.createElement(
    "form",
    { onSubmit: handleSubmit },
    React.createElement(
      "fieldset",
      null,
      React.createElement("label", { htmlFor: "lastname" }, "Nom"),
      React.createElement("input", { type: "text", name: "lastname", id: "lastname", required: true }),
    ),
    React.createElement(
      "fieldset",
      null,
      React.createElement("label", { htmlFor: "email" }, "Email"),
      React.createElement("input", { type: "email", name: "email", id: "email", required: true }),
    ),
    React.createElement(
      "fieldset",
      null,
      React.createElement("label", { htmlFor: "message" }, "Message"),
      React.createElement("textarea", { name: "message", id: "message", required: true }),
    ),
    React.createElement(
      "fieldset",
      null,
      React.createElement(
        "label",
        { htmlFor: "gdpr" },
        React.createElement("input", { type: "checkbox", name: "gdpr", id: "gdpr", required: true }),
        "J'accepte que mes données soient utilisées pour me recontacter",
      ),
    ),
    React.createElement("button", { type: "submit" }, "Envoyer"),
  ),
);

Et bien même si le code final est identique, le JSX apporte une lisibilité et une simplicité d'écriture qui est très appréciable. Pas mal non ? 😄

Et donc oui ! En faisant du JSX, on fait en réalité du JavaScript et pas du HTML !

Importation de React et ses exports

Au sein de ses pages, tu verras toujours que j'importe le contenu de React en intégralité (comme import React from 'react';).

Dans la réalité, on va destructurer les exports de React pour n'importer que ce dont on a besoin.

Cependant, pour te donner l'information d'où provient chaque élément, je préfère importer React en intégralité et que tu puisses visualiser les éléments de React utilisés avec leur provenance.

🧩 Intégration de JavaScript dans le JSX

Mais l'un des autres avantages du JSX est la possibilité d'ajouter du JavaScript directement dans le code !

Pour pouvoir ajouter du JavaScript dans le JSX, il suffit d'entourer le code JavaScript avec des accolades {}. C'est un peu comme si on "ouvrait un portail" pour insérer du JavaScript dans notre code JSX.

📦 Variables et fonctions

Par exemple, si tu veux afficher une variable dans ton JSX, tu peux le faire directement.
Et si tu veux appeler une fonction, c'est tout aussi simple !

const name = "Jean Dupont";

return <h1>Bonjour {name} !</h1>;

📝 Expressions

Tu peux également ajouter des expressions (comme des conditions ternaires par exemple).
Mais tu peux aussi faire un affichage conditionnel pour séparer plus facilement les éléments d'interface.

const age = 18;

return <p>{age >= 18 ? "Majeur" : "Mineur"}</p>;

🔄️ Boucles

Maintenant imagine que tu souhaites créer une interface qui liste des éléments provenant d'un tableau.

const fruits = ["pomme", "banane", "fraise"];

Dans un premier temps, on va revoir très rapidement comment on peut parser un tableau en JavaScript :

for (let i = 0; i < fruits.length; i++) {
	console.log(fruits[i]);
}
fruits.map((fruit) => {
	console.log(fruits[i]);
	});

En soit, toutes ces méthodes sont très bien et font ce qu'on leur demande sans souci. Cependant, React ne va pas forcément aimer ça sauf pour map.

La raison est simple :
React a besoin qu'on lui retourne un élément (ou un tableau d'éléments) pour pouvoir les afficher.

Alors avec des console.log on ne va pas aller loin, mais si au lieu de retourner un console.log on retournait un élément JSX ? 🤔

const fruits = ["pomme", "banane", "fraise"];

return (
  <ul>
    {fruits.map((fruit) => (
      <li key={fruit}>{fruit}</li>
    ))}
  </ul>
);

Voir l'exemple sur PlayCode

Et là : BAM ! 💥
Tu viens de créer une liste de fruits en utilisant un tableau de fruits.

Mais par contre...

C'est quoi ce `key` qui vient d'apparaître ?

La key est une propriété spéciale que React utilise pour identifier chaque élément de manière unique.
Cela permet à React de savoir quel élément a été ajouté, modifié ou supprimé.

Il est obligatoire d'avoir une key unique pour chaque élément d'une liste.
Si tu listes des éléments qui ont un identifiant unique (comme l'id qu'on aura dans nos données stockées dans une base de données par exemple), tu peux utiliser cet identifiant comme key.

📦 Les props

Les props (ou propriétés) sont des arguments que l'on peut passer à un composant React.
Je ne vais pas trop rentrer dans les détails ici, car on va les voir dans l'article d'après !

Mais pour te donner un aperçu, voici comment on peut passer des props à un composant :

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

Ici, on a un composant Button qui prend deux props : onClick et children.
onClick est une fonction qui sera appelée lorsqu'on cliquera sur le bouton, et children est tout ce qui se trouve entre les balises ouvrante et fermante du composant.

Conclusion

Alors, plutôt cool le JSX non ? 😎

Même si cette syntaxe rebute certains développeurs (souvent ils se la jouent puristes, mais chuuuuut 🤫), elle est toutefois très appréciée pour sa simplicité et sa lisibilité.
Question de goût après tout !

Dernières documentations

CP 7 - Développer des composants métier coté serveur

Dernière modification :

Synthèse et explications des attentes relatives à la compétence professionnelle 7 du titre professionnel Développeur Web et Web Mobile (DWWM-01280m04).

Modèle Logique/Relationnel de Données (MLD/MRD) Merise

Dernière modification :

Plongez dans le MLD et MRD de Merise pour transformer votre modèle conceptuel en une structure relationnelle optimisée.

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.