Des exemples React Hook Form fonctionnels à essayer sur la page : validation Zod, vérifications asynchrones, field arrays, formulaire multi-étapes, upload de fichier, Controller et server actions Next.js.
React Hook Form gère les formulaires React avec des inputs non contrôlés : appelez useForm, étalez register("name") sur chaque input, et enveloppez votre fonction d'envoi dans handleSubmit. Ajoutez zodResolver pour valider avec un schéma Zod. Les formulaires ci-dessous fonctionnent sur cette page : règles, Zod, vérifications asynchrones, field arrays, formulaire multi-étapes, upload de fichier et server actions.
Installation
Remplissez chaque démo, envoyez-la avec des erreurs, puis corrigez-les. Le code à côté est celui qui s'exécute. Les erreurs sont reliées à leurs inputs avec aria-describedby et annoncées avec role="alert", les formulaires fonctionnent donc aussi avec un lecteur d'écran.
React Hook Form provoque moins de re-rendus car les inputs restent non contrôlés et il lit les valeurs via des refs. Formik garde chaque valeur dans le state React. Pour les grands formulaires, React Hook Form est généralement plus rapide et demande moins de code.
Installez zod et @hookform/resolvers, définissez un schéma z.object, et passez resolver: zodResolver(schema) à useForm. Utilisez z.infer<typeof schema> comme type du formulaire ; les messages d'erreur viennent du schéma.
Appelez reset() dans votre gestionnaire d'envoi une fois l'enregistrement réussi, ou passez de nouvelles valeurs avec reset(values). reset peut aussi être appelé dans un effet quand isSubmitSuccessful passe à true.
Les inputs HTML renvoient du texte. Enregistrez le champ avec valueAsNumber: true, ou utilisez z.coerce.number() dans un schéma Zod, pour obtenir un vrai nombre.
Oui. shadcn/ui fournit un composant Form construit sur le Controller de React Hook Form. Notre guide des formulaires et tableaux shadcn le détaille avec un exemple en direct.
Les parties de l'API que vous utiliserez le plus
register relie un input par son nom et accepte des règles de style HTML. errors contient un message par champ après un envoi échoué.
Un seul schéma vous donne les règles de validation, les messages d'erreur et le type TypeScript. refine vérifie deux champs ensemble, et path indique quel champ reçoit l'erreur.
Une fonction validate peut renvoyer une promesse. Renvoyez true si la valeur convient, ou une chaîne à afficher comme erreur. Associez-la au mode onBlur pour qu'elle ne s'exécute pas à chaque frappe.
useFieldArray gère une liste à l'intérieur du formulaire. Utilisez field.id comme key, jamais l'index, pour que React garde chaque input rattaché à la bonne ligne.
Gardez un seul formulaire pour toutes les étapes et appelez trigger avec les champs de l'étape en cours avant de passer à la suivante. Les valeurs des étapes précédentes restent dans le formulaire, donc l'envoi final contient tout.
Un input de fichier s'enregistre comme les autres ; sa valeur est une FileList. Vérifiez la taille et le type dans validate et envoyez le fichier avec FormData.
Les inputs qui n'exposent pas de ref, comme de nombreux sélecteurs de date et selects personnalisés, se connectent via Controller. Il transmet value et onChange à votre composant.
Validez dans le navigateur pour un retour rapide, puis à nouveau sur le serveur car le navigateur peut être contourné. Partager un seul schéma Zod garde les deux synchronisés ; setError affiche les problèmes côté serveur sur le bon champ.
Besoin plutôt d'un simple formulaire HTML ? Consultez
Envoyé :
Veuillez saisir votre nom
Veuillez saisir votre e-mail
Cet e-mail semble incorrect
Envoi...
Envoyer
Saisissez un e-mail valide
Au moins 8 caractères
Les mots de passe ne correspondent pas
Mot de passe
Confirmer le mot de passe
Créer un compte
Cette démo simule le serveur avec une courte attente. Déjà pris : admin, studio, hello.
Nom d'utilisateur
Choisissez un nom d'utilisateur
Ce nom d'utilisateur est déjà pris
Vérification...
Réserver
Création de logo
Nom de l'article {n}
Quantité de l'article {n}
Article
Supprimer
Ajouter un article
Enregistrer
Obligatoire
Étape {n} sur {total}
Entreprise
Taille de l'équipe
Formule
Choisir
Starter
Équipe
Remplissez les champs en surbrillance.
Retour
Suivant
Terminer
Logo (PNG ou JPG, jusqu'à 2 MB ; il reste dans votre navigateur)
Choisir un fichier
2 MB maximum
PNG ou JPG uniquement
Envoyer
Au moins 10
Budget :
Commencer gratuitement · Sans carte bancaire