Initialisation des systèmes...

Baptiste.Dev
Retour aux notes
FrameworksIntermédiaireSérie : React / Next.js

React : Événements et rendu conditionnel

Réagir aux clics et aux saisies (onClick, onChange), puis adapter l'affichage à l'état : ternaire, &&, early return. Là où le state prend vie.

Par Baptiste Vidal
3 min de lecture
Mis à jour il y a 2 semaines
reactevenementsrendu-conditionnelonclickfrontend

React : Événements et rendu conditionnel

Le state donne de la mémoire à un composant. Les événements la font changer, et le rendu conditionnel adapte l'affichage en conséquence. C'est le trio qui rend une interface vivante.


# Réagir aux événements

En React, on attache un gestionnaire directement dans le JSX, en camelCase, en lui passant une fonction :

function Bouton() {
  function gererClic() {
    console.log("Cliqué !");
  }
  return <button onClick={gererClic}>Clique</button>;
}

Les plus courants : onClick, onChange (saisie), onSubmit (envoi de formulaire).

Passe la fonction, ne l'appelle pas : onClick={gererClic} ✅ ; onClick={gererClic()} ❌ exécute la fonction au rendu, pas au clic. Pour passer un argument, enveloppe dans une flèche : onClick={() => supprimer(id)}.


# Lire une saisie avec onChange

Coupler un onChange au state, c'est la base d'un champ contrôlé (dont la valeur est pilotée par React) :

function Recherche() {
  const [texte, setTexte] = useState("");
 
  return (
    <>
      <input value={texte} onChange={(e) => setTexte(e.target.value)} />
      <p>Tu cherches : {texte}</p>
    </>
  );
}

L'objet e (l'événement) porte la valeur saisie dans e.target.value. À chaque frappe : setTexte → re-rendu → l'affichage suit.


# Empêcher le comportement par défaut

Certains éléments ont un comportement natif : un formulaire recharge la page à l'envoi. e.preventDefault() l'en empêche :

function Formulaire() {
  function gererEnvoi(e) {
    e.preventDefault(); // sans ça, la page se recharge
    console.log("Envoyé");
  }
  return <form onSubmit={gererEnvoi}>{/* ... */}</form>;
}

# Le rendu conditionnel

Afficher, ou non, selon l'état. Trois techniques selon le cas.

Le ternaire - choisir entre deux rendus :

{connecte ? <Profil /> : <BoutonConnexion />}

Le && - afficher quelque chose ou rien :

{erreur && <p className="erreur">{erreur}</p>}

On retrouve le court-circuit vu en JavaScript : si erreur est falsy, rien n'est rendu.

Le early return - sortir tôt du composant :

function Profil({ utilisateur }) {
  if (!utilisateur) return <p>Chargement...</p>;
  return <h1>{utilisateur.nom}</h1>;
}

Piège classique du && avec un nombre : {liste.length && <Liste />} affiche 0 à l'écran quand la liste est vide (0 est falsy, mais reste une valeur affichable). Teste explicitement : {liste.length > 0 && <Liste />}.


# Tout ensemble : un interrupteur

State + événement + rendu conditionnel, la boucle fondamentale de React :

function Interrupteur() {
  const [allume, setAllume] = useState(false);
 
  return (
    <button onClick={() => setAllume(!allume)}>
      {allume ? "🔆 Allumé" : "🌙 Éteint"}
    </button>
  );
}

Un clic inverse le state → React re-rend → l'affichage suit. Rien à synchroniser à la main.


# À retenir

  • Les événements s'écrivent en camelCase et reçoivent une fonction (onClick={fn}, jamais fn()).
  • onChange + state = lire une saisie ; e.preventDefault() bloque le comportement natif (rechargement d'un formulaire).
  • Rendu conditionnel : le ternaire (deux cas), le && (afficher ou rien), le early return (sortir tôt).
  • Attention au && avec un nombre : teste explicitement (length > 0).

Prochaine étape : synchroniser un composant avec l'extérieur - données, API, minuteurs - grâce au hook useEffect.