Afficher les erreurs Zod Refine avec React-Hook-Form

Si vous avez déjà rencontré des problèmes pour afficher correctement vos formState.errors avec React-Hook-Form, que ce soit avec Yup Test ou Zod Refine, vous êtes sur la bonne vidéo ! On va résoudre ce problème et réussir à afficher nos message d'erreur sur le formulaire.

placeholder
DIY04-05-2024

Introduction

Dans cette vidéo, nous abordons une problématique courante pour les développeurs qui utilisent React Hook Form en combinaison avec des résolveurs tels que Zod ou Yup : l'affichage des erreurs de validation dans l'état du formulaire.
Si vous vous êtes déjà arraché les cheveux sur ce sujet, cette vidéo est faite pour vous.

Contenu

Présentation du problème

  • Difficulté à afficher les erreurs de validation :
    Les erreurs définies dans formState ne s'affichent parfois pas correctement, en particulier avec des règles complexes créées via Zod.
  • Bug dans React Hook Form :
    Même si les erreurs sont présentes dans le code, elles ne sont pas toujours visibles sur l'écran.

Solution avec Zod et ses Refine

  1. Création de règles personnalisées avec Zod :
    • Validation d'une URL YouTube pour le champ videoURL.
    • Interdiction des URLs dans le champ message.
  2. Retour des erreurs claires :
    • Clé d'erreur pour videoURL : must be valid YouTube.
    • Clé d'erreur pour message : no URL in message.
const schema = z.object({
  videoURL: z.string().refine((val) => isYouTubeURL(val), {
    message: "must be valid YouTube",
  }),
  message: z.string().refine((val) => !containsURL(val), {
    message: "no URL in message",
  }),
});

Restez informé

Abonnez-vous à ma newsletter pour recevoir les derniers articles et mises à jour

Restez au courant

Pour devenir un meilleur développeur chaque jour.

Nous respectons votre vie privée. Désabonnement possible à tout moment.

Votre vie privée

Nous utilisons des cookies pour améliorer votre expérience sur notre site, analyser notre trafic et personnaliser les publicités. En cliquant sur "Accepter", vous consentez à l'utilisation de tous les cookies. Vous pouvez également choisir de refuser en cliquant sur le bouton "Refuser".