Apprenez à piloter chaque champ de formulaire depuis l'état React pour valider et soumettre des données fiables.
Ouvrir cette leçon dans KodokonEn React, un formulaire devient prévisible quand chaque champ est contrôlé : la valeur affichée provient de l'état du composant, et chaque frappe passe par onChange pour mettre cet état à jour. Le DOM n'est plus la source de vérité, c'est votre état qui l'est. Concrètement, vous liez la prop value à une variable d'état et vous fournissez un gestionnaire qui appelle la fonction de mise à jour.
import { useState } from "react";
function EmailField() {
const [email, setEmail] = useState("");
return (
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
);
}Un vrai formulaire compte rarement un seul champ. Plutôt que de multiplier les useState, regroupez les valeurs dans un objet et écrivez un gestionnaire générique. L'attribut name de chaque champ doit correspondre exactement à une clé de l'objet : c'est lui qui indique quelle propriété mettre à jour.
const [form, setForm] = useState({
username: "",
password: "",
});
function handleChange(e) {
const { name, value } = e.target;
setForm((prev) => ({ ...prev, [name]: value }));
}Reste la soumission. Par défaut, le navigateur recharge la page quand un formulaire est envoyé : appelez e.preventDefault() en tête de votre gestionnaire onSubmit. C'est aussi le bon endroit pour valider les données avant de les transmettre, puisque tout l'état du formulaire est déjà sous la main.
function handleSubmit(e) {
e.preventDefault();
if (form.username.trim() === "") {
alert("Le nom d'utilisateur est requis.");
return;
}
console.log("Envoi :", form);
}
return (
<form onSubmit={handleSubmit}>
<input
name="username"
value={form.username}
onChange={handleChange}
/>
<button type="submit">Créer le compte</button>
</form>
);value={email} à un <input> sans fournir de onChange. Que se passe-t-il ?e.preventDefault() dans le gestionnaire onSubmit ?