Gestion des formulaires en React

La gestion des formulaires en React englobe l’ensemble des techniques pour capturer, valider, stocker et soumettre les données saisies par un utilisateur.

Elle repose principalement sur deux approches : les composants contrôlés (recommandé) et les composants non-contrôlés.

Les 2 approches principales

Approche Principe Cas d’usage
Contrôlé React gère l’état de chaque champ via useState Formulaires standards, validation en temps réel
Non-contrôlé Le DOM gère l’état, React lit via useRef Cas spécifiques (fichiers, libs tierces, performance extrême)

Exemple de formulaire contrôlé

function FormulaireInscription() {
  const [formData, setFormData] = useState({
    nom: '',
    email: '',
    password: ''
  });
  const [errors, setErrors] = useState({});

  // Gestion des changements
  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData(prev => ({ ...prev, [name]: value }));
    // Validation en temps réel
    if (name === 'email' && !value.includes('@')) {
      setErrors(prev => ({ ...prev, email: 'Email invalide' }));
    } else {
      setErrors(prev => ({ ...prev, email: null }));
    }
  };

  // Gestion de la soumission
  const handleSubmit = async (e) => {
    e.preventDefault();
    // Validation finale
    if (Object.keys(errors).length > 0) return;
    
    try {
      await fetch('/api/inscription', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(formData)
      });
    } catch (err) {
      console.error('Erreur:', err);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        name="nom"
        value={formData.nom}
        onChange={handleChange}
        placeholder="Nom"
      />
      
      <input
        name="email"
        value={formData.email}
        onChange={handleChange}
        placeholder="Email"
      />
      {errors.email && <span className="error">{errors.email}</span>}
      
      <input
        name="password"
        type="password"
        value={formData.password}
        onChange={handleChange}
        placeholder="Mot de passe"
      />
      
      <button type="submit">S'inscrire</button>
    </form>
  );
}

Bibliothèques spécialisées

Pour les formulaires complexes, des librairies externes simplifient la gestion :

Bibliothèque Header Header
React Hook Form Léger, performant, peu de re-rendus Recommandé pour la plupart des projets
Formik Mature, grande communauté Projets existants, besoin de stabilité
Zod + React Hook Form Validation schématique puissante Validation complexe et typée
Explorer les thématiques : React
Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.