codelynx.dev
🇫🇷🇬🇧

Retour 01/12/2024

C'est quoi le JSX en React ? Guide complet pour débutant

Écris par Melvyn Malherbe le 01/12/2024


Quand j'ai commencé React, le JSX me paraissait être de la magie noire.

Du HTML dans du JavaScript ? Comment c'est possible ? 🤔

Dans ce guide complet, on va démystifier le JSX ensemble. Tu vas comprendre :

  • Ce qu'est réellement le JSX
  • Comment il fonctionne sous le capot
  • Pourquoi c'est juste du JavaScript
  • Les bonnes pratiques à adopter

Qu'est-ce que le JSX ?

Les origines du JSX

JSX signifie "JavaScript XML". Le XML est une syntaxe qui utilise des balises (comme <div>) avec des propriétés. En fait, le HTML que tu connais est basé sur le XML !

Exemple XML :

XML
<user>
  <name>John</name>
  <age>25</age>
</user>

Le XML est un langage de balisage qui permet généralement de définir des objets et des données.

La seule différence est que le HTML définit des balises spécifiques (<div>, <span>, etc.) alors que le XML est plus générique.

Pourquoi Facebook a créé le JSX ?

L'équipe de React chez Facebook voulait rendre la création d'interfaces plus intuitive. Le problème ? Écrire du HTML en JavaScript pur était vraiment pénible.

Avant le JSX, il fallait écrire :

Avec JSX, le même code devient :

Comment fonctionne le JSX ?

Mais tu te demandes du coup, comment fonctionne le JSX et pourquoi on est capable d'écrire du "HTML" dans du JavaScript ?

La transformation du JSX

Quand tu écris du JSX, il est transformé en JavaScript pur par un outil appelé Babel. Cette transformation se fait à la compilation, avant que ton code ne soit exécuté.

C'est pour ça qu'on dit que le JSX est du "sucre syntaxique" - il rend le code plus agréable à écrire sans changer ce qui se passe réellement.

En résumé, quand tu écris ceci :

JSX
const App = () => (
  <div>
    <h1>Hello</h1>
  </div>
);

Babel va transformer ce code en :

JS
const App = () => React.createElement('div', null, React.createElement('h1', null, 'Hello'));

Le code JSX ne sera jamais envoyé tel quel à l'utilisateur final. C'est pour ça que tu ne le vois jamais dans le code final d'une application.

Les règles du JSX

  1. Une seule racine : Chaque expression JSX doit avoir un seul élément parent.
JSX
// ❌ Incorrect
const App = () => {
  return (
    <h1>Titre</h1>
    <p>Paragraphe</p>
  );
};

// ✅ Correct
const App = () => {
  return (
    <div>
      <h1>Titre</h1>
      <p>Paragraphe</p>
    </div>
  );
};
  1. Toutes les balises doivent être fermées : Même les balises auto-fermantes comme <img> doivent être fermées avec />
JSX
// ❌ Incorrect
<img src="photo.jpg">

// ✅ Correct
<img src="photo.jpg" />
  1. camelCase pour les propriétés : Les attributs HTML deviennent camelCase en JSX
JSX
// ❌ Incorrect
<div class="container" onclick={handleClick}>

// ✅ Correct
<div className="container" onClick={handleClick}>

Pourquoi on utilise className et pas class ?

En fait, React se base pas sur le nom des attributs HTML mais sur le nom des propriétés JavaScript. En JavaScript si tu souhaites modifier la classe d'un élément tu utilises className :

JS
const element = document.querySelector('.my-element');
element.className = 'new-class';

Le JSX et JavaScript : Un duo puissant

La puissance du JSX vient du fait que toutes ces fonctionnalités sont simplement dérivées du JavaScript avec une règle simple : il est possible de passer du monde JavaScript au JSX en utilisant les accolades : {}

Les expressions JavaScript dans le JSX

Tu peux utiliser n'importe quelle expression JavaScript dans le JSX en utilisant les accolades {}.

Les tableaux et le JSX

Le JSX gère parfaitement les tableaux, c'est ce qui rend React si puissant pour afficher des listes :

N'oublie jamais la prop key quand tu fais une liste ! Elle permet à React d'optimiser les rendus.

Si les tableaux fonctionnent c'est car React.createElement accepte les tableaux :

JS
React.createElement('div', null, ["hello", "world"]);

Les bonnes pratiques du JSX

La magie du JSX c'est qu'on peut le déclarer n'importe où et que finalement c'est juste des objets JavaScript.

1. Utiliser des composants pour organiser son code

Le JSX permet de créer des composants réutilisables :

2. Éviter la logique complexe dans le JSX

Extrais la logique complexe dans des fonctions :

JSX
// ❌ Incorrect
return (
  <div>
    {users
      .filter(user => user.age > 18)
      .map(user => user.name)
      .join(', ')}
  </div>
);

// ✅ Correct
const getAdultNames = (users) => {
  return users
    .filter(user => user.age > 18)
    .map(user => user.name)
    .join(', ');
};

return <div>{getAdultNames(users)}</div>;

3. Utiliser les fragments

Quand tu n'as pas besoin d'une div supplémentaire :

JSX
// ❌ Div inutile
return (
  <div>
    <h1>Titre</h1>
    <p>Paragraphe</p>
  </div>
);

// ✅ Utilisation des fragments
return (
  <>
    <h1>Titre</h1>
    <p>Paragraphe</p>
  </>
);

Les fragments sont utiles car comme on l'a vu on est obligé de retourner qu'une seule racine. Les fragments permettent de créer une sorte de racine virtuelle pour le JSX mais qui ne sera pas affichée dans le résultat final.

Les cas avancés du JSX

Il y a quelques méthodes un peu plus avancées du JSX qui sont très utiles.

Les props spread

Tu peux utiliser l'opérateur spread pour passer toutes les props d'un objet :

Les children spéciaux

JSX permet aussi de passer des fonctions comme props :

Les fragments

JSX permet aussi d'utiliser des fragments pour grouper plusieurs éléments sans avoir besoin d'une div supplémentaire :

La props children

C'est une props spéciale qui permet d'utiliser la même syntaxe que pour les éléments HTML :

HTML
<p>
  Je suis le children
</p>

Mais nous on souhaite le faire avec nos composants custom React. Pour ça la props children vient récupérer le contenu qui est entre les balises ouvrantes et fermantes de notre élément pour l'ajouter dans cette props.

Conclusion

J'ai l'impression que tu es maintenant un pro de JavaScript, il est intéressant pour toi d'en savoir plus sur les listes en React ! Tu pourrais aussi apprendre React de 0 pour monter en compétence.

Mais surtout tu peux rejoindre une formation React gratuite juste ici. !

BeginReact

Cours React gratuit

Accède à des exercices, des vidéos et bien plus sur React dans la formation "BeginReact" 👇