Améliorez votre formulaire e-mail avec la validation
La mise en œuvre de la validation de formulaire dans React peut être difficile, en particulier lors de l'intégration de React Hook Form avec d'autres bibliothèques. Dans ce guide, nous explorerons comment ajouter le formulaire React Hook et la validation Zod à une fonction de formulaire de contact par e-mail existante.
En suivant cette approche étape par étape, vous apprendrez comment améliorer les fonctionnalités de votre formulaire, en garantissant que votre formulaire de contact par e-mail est robuste et fiable. Plongeons dans le processus et rendons la validation de votre formulaire transparente.
Commande | Description |
---|---|
useForm | Un hook fourni par React Hook Form pour gérer l'état et la validation du formulaire. |
zodResolver | Une fonction de résolution pour intégrer la validation du schéma Zod avec React Hook Form. |
renderToStaticMarkup | Une fonction de React DOM Server pour restituer les composants React en chaînes HTML statiques. |
nodemailer.createTransport | Crée un objet de transport pour envoyer des e-mails à l'aide de Nodemailer. |
bodyParser.json | Middleware pour analyser les corps de requêtes JSON dans Express. |
transporter.sendMail | Fonction pour envoyer des emails en utilisant l'objet de transport configuré dans Nodemailer. |
replyTo | Une option dans Nodemailer pour définir l'adresse de réponse à un e-mail. |
Implémentation des fonctionnalités de validation et de courrier électronique
Le script frontend intègre React Hook Form et Zod pour la validation du formulaire. Le hook useForm gère l'état du formulaire et la fonction zodResolver connecte la validation Zod au formulaire. Lorsque le formulaire est soumis, la fonction handleSubmit traite les données. La fonction renderToStaticMarkup convertit les composants React en chaînes HTML statiques, qui sont ensuite utilisées pour générer le contenu de l'e-mail. Cette configuration garantit que les données sont validées avant l'envoi de l'e-mail, offrant ainsi une validation robuste côté client.
Le script backend est construit à l'aide de Node.js avec Express. Le middleware bodyParser.json analyse les corps des requêtes JSON et nodemailer.createTransport configure le service de transport de courrier électronique. Lorsque le point de terminaison de l'API est atteint, la fonction transporter.sendMail envoie l'e-mail en utilisant les détails fournis. L'option replyTo définit l'adresse de réponse, garantissant ainsi une communication par courrier électronique appropriée. Cette combinaison de scripts frontend et backend fournit une solution complète pour gérer la soumission de formulaires et la fonctionnalité de courrier électronique avec validation.
Intégration de React Hook Form et Zod pour la validation des e-mails
Frontend : Réagissez avec React Hook Form et Zod
import React from 'react';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import * as z from 'zod';
const schema = z.object({
fullName: z.string().min(1, "Full Name is required"),
senderEmail: z.string().email("Invalid email address"),
phone: z.string().min(10, "Phone number is too short"),
message: z.string().min(1, "Message is required"),
});
const ContactForm = () => {
const { register, handleSubmit, formState: { errors } } = useForm({
resolver: zodResolver(schema)
});
const onSubmit = async (data) => {
const finalHtml = renderToStaticMarkup(
<ContactFormEmail message={data.message} senderEmail={data.senderEmail} />
);
const finalText = renderToStaticMarkup(
<ContactFormEmail message={data.message} senderEmail={data.senderEmail} />
);
try {
const res = await fetch('/api/sendEmail.json', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
from: 'john@doe.com',
to: 'john@doe.com',
subject: 'New message from contact form',
reply_to: data.senderEmail,
html: finalHtml,
text: finalText
})
});
} catch (error) {
setError('root', { message: error.response.data.message });
}
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register('fullName')} placeholder="Full Name" />
{errors.fullName && <p>{errors.fullName.message}</p>}
<input {...register('senderEmail')} placeholder="Email" />
{errors.senderEmail && <p>{errors.senderEmail.message}</p>}
<input {...register('phone')} placeholder="Phone" />
{errors.phone && <p>{errors.phone.message}</p>}
<textarea {...register('message')} placeholder="Message" />
{errors.message && <p>{errors.message.message}</p>}
<button type="submit">Send</button>
</form>
);
};
export default ContactForm;
Configuration du backend pour l'envoi d'e-mails
Backend : Node.js avec Express
const express = require('express');
const nodemailer = require('nodemailer');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-password'
}
});
app.post('/api/sendEmail.json', (req, res) => {
const { from, to, subject, reply_to, html, text } = req.body;
const mailOptions = {
from, to, subject, replyTo: reply_to, html, text
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return res.status(500).send({ message: error.message });
}
res.status(200).send({ message: 'Email sent successfully' });
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Intégration de la validation côté client et côté serveur
Pour gérer efficacement la validation des formulaires et la fonctionnalité de messagerie, il est crucial d’intégrer la validation côté client et côté serveur. Alors que la validation côté client garantit une meilleure expérience utilisateur en fournissant un retour d'information immédiat, la validation côté serveur est essentielle pour maintenir l'intégrité et la sécurité des données. L'utilisation de React Hook Form avec Zod côté client vous permet de définir des schémas et de valider efficacement les entrées utilisateur. Cette approche empêche le traitement et l'envoi de données invalides au serveur, minimisant ainsi les erreurs et améliorant la qualité des données.
Côté serveur, l'utilisation de Express avec des middlewares tels que body-parser et Nodemailer garantit que le backend peut gérer et traiter les données en toute sécurité. La validation côté serveur agit comme une deuxième couche de défense, vérifiant que les données reçues sont conformes au format et aux valeurs attendus. Cette stratégie de validation à double couche est robuste et complète, offrant une expérience sécurisée et conviviale.
Foire aux questions sur l'intégration de React Hook Form et Zod
- Comment intégrer React Hook Form avec Zod ?
- Utilisez la fonction zodResolver du package @hookform/resolvers/zod pour connecter la validation Zod à React Hook Form.
- Quel est le but de renderToStaticMarkup ?
- renderToStaticMarkup convertit les composants React en chaînes HTML statiques, qui peuvent être utilisées pour le contenu des e-mails ou d'autres besoins HTML statiques.
- Comment puis-je gérer la soumission de formulaire avec React Hook Form ?
- Utilisez la fonction handleSubmit de React Hook Form pour gérer les soumissions de formulaires et valider les données avant de les traiter.
- Que fait nodemailer.createTransport ?
- nodemailer.createTransport crée un objet de transport pour envoyer des e-mails à l'aide d'un service spécifié et de détails d'authentification.
- Pourquoi la validation côté serveur est-elle importante ?
- La validation côté serveur garantit que les données reçues par le serveur sont valides, en maintenant l'intégrité des données et en les protégeant contre les entrées malveillantes.
Réflexions finales sur la validation et la soumission du formulaire
L'intégration de React Hook Form et Zod pour la validation des formulaires dans vos applications React améliore l'intégrité des données et l'expérience utilisateur. En combinant la validation côté client avec le traitement côté serveur à l'aide de Node.js et Express, vous créez une solution robuste pour gérer les soumissions de formulaires. Cette approche garantit que les données sont correctement validées et traitées en toute sécurité, réduisant ainsi les erreurs et améliorant la fiabilité. La mise en œuvre de ces pratiques peut améliorer considérablement la fonctionnalité et la sécurité de vos formulaires Web.