Millora el teu formulari de correu electrònic amb la validació
Implementar la validació de formularis a React pot ser un repte, especialment quan s'integra React Hook Form amb altres biblioteques. En aquesta guia, explorarem com afegir el formulari React Hook i la validació de Zod a una funció de formulari de contacte de correu electrònic existent.
Seguint aquest enfocament pas a pas, aprendràs a millorar la funcionalitat del teu formulari, assegurant-te que el teu formulari de contacte per correu electrònic és robust i fiable. Endinsem-nos en el procés i fem que la validació del formulari sigui perfecta.
Comandament | Descripció |
---|---|
useForm | Un ganxo proporcionat per React Hook Form per gestionar l'estat i la validació del formulari. |
zodResolver | Una funció de resolució per integrar la validació de l'esquema Zod amb React Hook Form. |
renderToStaticMarkup | Una funció de React DOM Server per renderitzar els components de React a cadenes HTML estàtiques. |
nodemailer.createTransport | Crea un objecte de transport per enviar correus electrònics mitjançant Nodemailer. |
bodyParser.json | Programari intermedi per analitzar els cossos de sol·licitud JSON a Express. |
transporter.sendMail | Funció per enviar correus electrònics mitjançant l'objecte de transport configurat a Nodemailer. |
replyTo | Una opció a Nodemailer per definir l'adreça de resposta per a un correu electrònic. |
Implementació de la funcionalitat de validació i correu electrònic
L'script d'interfície integra React Hook Form i Zod per a la validació del formulari. El ganxo useForm gestiona l'estat del formulari i la funció zodResolver connecta la validació Zod amb el formulari. Quan s'envia el formulari, la funció handleSubmit processa les dades. La funció renderToStaticMarkup converteix els components de React en cadenes HTML estàtiques, que després s'utilitzen per generar el contingut del correu electrònic. Aquesta configuració garanteix que les dades es validin abans que s'enviï el correu electrònic, proporcionant una validació robusta del costat del client.
L'script de fons es crea amb Node.js amb Express. El programari intermediari bodyParser.json analitza els cossos de sol·licitud JSON i nodemailer.createTransport configura el servei de transport de correu electrònic. Quan es colpeja el punt final de l'API, la funció transporter.sendMail envia el correu electrònic utilitzant els detalls proporcionats. L'opció replyTo estableix l'adreça de resposta, garantint una comunicació de correu electrònic adequada. Aquesta combinació d'scripts d'interfície i backend ofereix una solució completa per gestionar l'enviament de formularis i la funcionalitat de correu electrònic amb validació.
Integració de React Hook Form i Zod per a la validació del correu electrònic
Frontend: Reacciona amb React Hook Form i 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;
Configuració del backend per a l'enviament de correu electrònic
Backend: Node.js amb 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');
});
Integració de la validació del costat del client i del costat del servidor
Per gestionar eficaçment la validació de formularis i la funcionalitat del correu electrònic, és crucial integrar la validació tant del costat del client com del servidor. Tot i que la validació del costat del client garanteix una millor experiència d'usuari proporcionant comentaris immediats, la validació del costat del servidor és essencial per mantenir la integritat i la seguretat de les dades. L'ús de React Hook Form amb Zod al costat del client us permet definir esquemes i validar les entrades de l'usuari de manera eficient. Aquest enfocament evita que les dades no vàlides es processin i s'enviïn al servidor, minimitzant els errors i millorant la qualitat de les dades.
Al costat del servidor, utilitzar Express amb middleware com body-parser i Nodemailer garanteix que el backend pugui gestionar i processar les dades de manera segura. La validació del costat del servidor actua com una segona capa de defensa, verificant que les dades rebudes compleixen amb el format i els valors esperats. Aquesta estratègia de validació de doble capa és robusta i completa, proporcionant una experiència segura i fàcil d'utilitzar.
Preguntes freqüents sobre la integració de React Hook Form i Zod
- Com integro React Hook Form amb Zod?
- Utilitzeu la funció zodResolver del paquet @hookform/resolvers/zod per connectar la validació Zod amb React Hook Form.
- Quin és l'objectiu de renderToStaticMarkup?
- renderToStaticMarkup converteix els components de React en cadenes HTML estàtiques, que es poden utilitzar per al contingut del correu electrònic o per a altres necessitats HTML estàtiques.
- Com puc gestionar l'enviament de formularis amb React Hook Form?
- Utilitzeu la funció handleSubmit de React Hook Form per gestionar els enviaments de formularis i validar les dades abans de processar-los.
- Què fa nodemailer.createTransport?
- nodemailer.createTransport crea un objecte de transport per enviar correus electrònics mitjançant un servei especificat i detalls d'autenticació.
- Per què és important la validació del costat del servidor?
- La validació del costat del servidor garanteix que les dades rebudes pel servidor siguin vàlides, mantenint la integritat de les dades i protegint-les contra entrades malicioses.
Consideracions finals sobre la validació i l'enviament del formulari
La integració de React Hook Form i Zod per a la validació de formularis a les vostres aplicacions React millora la integritat de les dades i l'experiència de l'usuari. En combinar la validació del client amb el processament del servidor mitjançant Node.js i Express, creeu una solució sòlida per gestionar els enviaments de formularis. Aquest enfocament garanteix que les dades es validin correctament i es processin de manera segura, reduint els errors i millorant la fiabilitat. La implementació d'aquestes pràctiques pot millorar significativament la funcionalitat i la seguretat dels vostres formularis web.