Découvrir React
Notions théoriques
Qu'est-ce que React ?
React est une bibliothèque JavaScript créée par Meta (Facebook) pour construire des interfaces Web interactives. C'est l'une des bibliothèques UI les plus utilisées dans le monde professionnel.
Contrairement à Svelte (un compilateur), React est une bibliothèque exécutée dans le navigateur : elle utilise un Virtual DOM pour calculer efficacement les mises à jour de l'interface.
| Caractéristique | React | Svelte |
|---|---|---|
| Approche | Bibliothèque runtime | Compilateur |
| Virtual DOM | Oui | Non |
| Syntaxe des templates | JSX (JS + HTML) | HTML avec {} |
| Taille du bundle | Plus importante | Très petite |
| Écosystème | Très large | Plus récent |
JSX : JavaScript + HTML
React utilise JSX (JavaScript XML), une syntaxe qui permet d'écrire du HTML directement dans du JavaScript :
function Bonjour() {
const prenom = 'Alice'
return (
<div>
<h1>Bonjour, {prenom} !</h1>
<p>Bienvenue dans React.</p>
</div>
)
}
JSX ressemble à du HTML, mais avec quelques différences :
classdevientclassName(<div className="carte">)- Les attributs s'écrivent en camelCase :
onclick→onClick,onchange→onChange - Chaque composant doit retourner un seul élément racine (ou un Fragment
<>...</>)
Les composants fonctionnels
En React, un composant est une fonction JavaScript qui retourne du JSX. Par convention, son nom commence par une majuscule :
function Carte({ titre, description }) {
return (
<div className="carte">
<h2>{titre}</h2>
<p>{description}</p>
</div>
)
}
Créer un projet React avec Vite
npm create vite@latest mon-projet --template react
cd mon-projet
npm install
npm run dev
Structure d'un projet React+Vite
mon-projet/
├── index.html
├── package.json
├── vite.config.js
└── src/
├── main.jsx ← Monte le composant racine dans le DOM
├── App.jsx ← Composant racine de l'application
└── App.css ← Styles du composant App
src/main.jsx — point d'entrée :
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)
Passer des données : les props
Les props (propriétés) fonctionnent comme en Svelte : le parent passe des données à l'enfant via des attributs.
// Composant enfant
function Salutation({ prenom, age }) {
return <p>Bonjour {prenom}, vous avez {age} ans.</p>
}
// Composant parent
function App() {
return (
<div>
<Salutation prenom="Alice" age={25} />
<Salutation prenom="Bob" age={30} />
</div>
)
}
Exemple pratique
Voici src/App.jsx modifié pour afficher deux composants Carte :
function Carte({ titre, couleur }) {
return (
<div style={{ border: `2px solid ${couleur}`, padding: '1rem', borderRadius: '8px', marginBottom: '1rem' }}>
<h2>{titre}</h2>
</div>
)
}
function App() {
return (
<div style={{ padding: '2rem', fontFamily: 'sans-serif' }}>
<h1>Mon application React</h1>
<Carte titre="Svelte" couleur="#ff3e00" />
<Carte titre="React" couleur="#61dafb" />
</div>
)
}
export default App
En React, le style inline s'écrit avec un objet JavaScript : style={{ color: 'red' }} (double accolades). La première paire est la syntaxe JSX pour une expression JS, la seconde est l'objet de styles. Les propriétés CSS s'écrivent en camelCase : background-color → backgroundColor.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans ce TP, vous allez créer votre premier projet React avec Vite et créer un composant de carte réutilisable.
Étape 1 — Créer le projet React+Vite
npm create vite@latest tp-react --template react
cd tp-react
npm install
npm run dev
Avec Vite+React, les fichiers de composants portent l'extension .jsx (ou .tsx pour TypeScript). L'extension .jsx indique que le fichier contient du JSX — cela permet à Vite de le traiter correctement.
Étape 2 — Créer le composant CarteLanguage
Créez src/CarteLanguage.jsx :
Chaque fichier de composant React exporte son composant avec export default. C'est la convention qui permet d'importer le composant sans accolades : import CarteLanguage from './CarteLanguage.jsx'.
Étape 3 — Utiliser le composant dans App.jsx
Remplacez le contenu de src/App.jsx :
Quand un composant reçoit plusieurs props, écrivez chaque prop sur sa propre ligne. Cela améliore la lisibilité et facilite la modification ou la revue du code.