Tutoriel React — Chapitre 11

Les événements et les formulaires simples

Chapitre 11 — Les événements et les formulaires simples

Vous connaissez maintenant les composants, le state et les événements. Ce chapitre montre comment assembler tout cela proprement dans une mini‑application : découpage en composants, circulation des données, organisation des fichiers et règles simples pour garder un code lisible et maintenable.

Objectif : comprendre (pas apprendre par cœur) Niveau : débutant absolu Pratique : mini-exercice à la fin

Plan du chapitre

1) Vision globale d’une mini‑app

Une application React n’est pas une page HTML unique. C’est un arbre de composants.

App
├─ Header
├─ Counter
├─ UserForm
└─ Footer

Astuce : commencez toujours par dessiner cet arbre (sur papier ou mentalement) avant d’écrire le code.

2) Découper l’interface en composants

Règle simple :

  • si une partie de l’UI se répète → composant
  • si une partie a une responsabilité claire → composant

Exemple

  • Header : titre de l’application
  • Counter : compteur avec boutons
  • UserForm : formulaire utilisateur
  • Footer : pied de page

3) Où placer le state ? (règle essentielle)

Le state doit être placé dans le composant le plus haut qui en a besoin.

Règle clé : ne dupliquez jamais le même state à plusieurs endroits.

Si deux composants ont besoin de la même donnée, le state doit être remonté dans leur parent commun.

4) Faire circuler les données (props)

Les données circulent toujours dans un sens :

  • du parent vers l’enfant via les props
function Counter({ value }) {
  return <p>Compteur : {value}</p>;
}

export default function App() {
  const [count, setCount] = useState(0);

  return <Counter value={count} />;
}

5) Faire remonter des actions (events)

Un enfant ne modifie pas directement le state du parent. Il déclenche une fonction fournie par le parent.

function Counter({ value, onIncrement }) {
  return (
    <div>
      <p>{value}</p>
      <button onClick={onIncrement}>+1</button>
    </div>
  );
}

export default function App() {
  const [count, setCount] = useState(0);

  const handleIncrement = () => setCount((c) => c + 1);

  return <Counter value={count} onIncrement={handleIncrement} />;
}

C’est le cœur de React : données ↓ / actions ↑.

6) Organisation des dossiers

Une structure simple et efficace pour débuter :

src/
├─ App.jsx
├─ main.jsx
└─ components/
   ├─ Header.jsx
   ├─ Counter.jsx
   ├─ UserForm.jsx
   └─ Footer.jsx
  • 1 composant = 1 fichier
  • Noms clairs, en majuscule
  • Pas de logique complexe dans App

7) Exemple complet guidé

App gère le state, les composants enfants affichent et déclenchent des actions.

function Header() {
  return <h1>Mini‑app React</h1>;
}

function Counter({ value, onIncrement }) {
  return (
    <div>
      <p>Compteur : {value}</p>
      <button onClick={onIncrement}>+1</button>
    </div>
  );
}

export default function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <Header />
      <Counter value={count} onIncrement={() => setCount(count + 1)} />
    </div>
  );
}

8) Erreurs fréquentes

J’ai le même state dans plusieurs composants

Remontez le state dans le parent commun et passez‑le en props.

Un enfant modifie directement le state

Interdit. Passez une fonction depuis le parent.

App devient trop gros

Découpez davantage en composants spécialisés.

9) Résumé (à retenir)

  • Une app React = un arbre de composants
  • Le state est placé le plus haut possible
  • Données ↓ via props, actions ↑ via fonctions
  • Une structure claire évite 80% des bugs débutants

10) Exercice pratique

Créez une mini‑application avec :

  • Un composant Header
  • Un composant Counter (+ / -)
  • Un composant UserForm (champ prénom)

Le state doit être centralisé dans App.

Prochaine étape : Chapitre 12, on va découvrir le hook useEffect et comprendre le cycle de vie d’un composant.