Vylepšete svůj e-mailový formulář o ověření
Implementace ověřování formulářů v Reactu může být náročná, zejména při integraci React Hook Form s jinými knihovnami. V této příručce prozkoumáme, jak přidat React Hook Form a Zod ověření do existující funkce e-mailového kontaktního formuláře.
Dodržováním tohoto podrobného přístupu se naučíte, jak vylepšit funkčnost formuláře a zajistit, aby byl váš e-mailový kontaktní formulář robustní a spolehlivý. Pojďme se ponořit do procesu a zajistit bezproblémovou validaci formuláře.
Příkaz | Popis |
---|---|
useForm | Hák poskytovaný React Hook Form pro zpracování stavu formuláře a ověření. |
zodResolver | Funkce resolveru pro integraci ověření schématu Zod s formulářem React Hook. |
renderToStaticMarkup | Funkce ze serveru React DOM Server k vykreslení komponent React na statické řetězce HTML. |
nodemailer.createTransport | Vytvoří transportní objekt pro odesílání e-mailů pomocí Nodemailer. |
bodyParser.json | Middleware pro analýzu těl požadavků JSON v Express. |
transporter.sendMail | Funkce pro odesílání e-mailů pomocí nakonfigurovaného transportního objektu v Nodemailer. |
replyTo | Možnost v Nodemailer nastavit adresu pro odpověď na e-mail. |
Implementace funkce ověřování a e-mailu
Frontendový skript integruje React Hook Form a Zod pro ověření formuláře. Hák useForm zpracovává stav formuláře a funkce zodResolver připojuje ověření Zod k formuláři. Když je formulář odeslán, funkce handleSubmit zpracuje data. Funkce renderToStaticMarkup převádí komponenty React na statické HTML řetězce, které se pak používají ke generování obsahu e-mailu. Toto nastavení zajišťuje ověření dat před odesláním e-mailu a poskytuje robustní ověření na straně klienta.
Backendový skript je vytvořen pomocí Node.js s Express. Middleware bodyParser.json analyzuje těla požadavků JSON a nodemailer.createTransport konfiguruje službu přenosu e-mailů. Když je dosaženo koncového bodu API, funkce transporter.sendMail odešle e-mail pomocí poskytnutých podrobností. Možnost replyTo nastavuje adresu pro odpověď a zajišťuje správnou e-mailovou komunikaci. Tato kombinace frontendových a backendových skriptů poskytuje komplexní řešení pro zpracování odesílání formulářů a e-mailové funkce s ověřováním.
Integrace formuláře React Hook a Zod pro ověření e-mailu
Frontend: Reagujte pomocí React Hook Form a 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;
Nastavení backendu pro odesílání e-mailů
Backend: Node.js s 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');
});
Integrace ověřování na straně klienta a na straně serveru
Aby bylo možné efektivně zvládnout ověřování formulářů a e-mailové funkce, je zásadní integrovat ověřování na straně klienta i serveru. Zatímco ověřování na straně klienta zajišťuje lepší uživatelskou zkušenost tím, že poskytuje okamžitou zpětnou vazbu, ověřování na straně serveru je nezbytné pro zachování integrity a zabezpečení dat. Použití React Hook Form s Zod na straně klienta vám umožňuje definovat schémata a efektivně ověřovat uživatelské vstupy. Tento přístup zabraňuje zpracování neplatných dat a jejich odeslání na server, minimalizuje chyby a zvyšuje kvalitu dat.
Na straně serveru použití Express s middleware, jako je body-parser a Nodemailer zajišťuje, že backend může bezpečně zpracovávat a zpracovávat data. Ověření na straně serveru funguje jako druhá vrstva obrany a ověřuje, že přijatá data odpovídají očekávanému formátu a hodnotám. Tato dvouvrstvá strategie ověřování je robustní a komplexní a poskytuje bezpečné a uživatelsky přívětivé prostředí.
Často kladené otázky o integraci React Hook Form a Zod
- Jak integruji React Hook Form s Zod?
- Použijte funkci zodResolver z balíčku @hookform/resolvers/zod k propojení ověření Zod s React Hook Form.
- Jaký je účel renderToStaticMarkup?
- renderToStaticMarkup převádí komponenty React na statické HTML řetězce, které lze použít pro obsah e-mailů nebo jiné potřeby statického HTML.
- Jak mohu zpracovat odeslání formuláře pomocí React Hook Form?
- Pomocí funkce handleSubmit z React Hook Form můžete spravovat odesílání formulářů a ověřovat data před jejich zpracováním.
- Co dělá nodemailer.createTransport?
- nodemailer.createTransport vytvoří transportní objekt pro odesílání e-mailů pomocí zadané služby a ověřovacích podrobností.
- Proč je ověření na straně serveru důležité?
- Ověření na straně serveru zajišťuje, že data přijatá serverem jsou platná, zachovává integritu dat a chrání před škodlivými vstupy.
Závěrečné myšlenky na ověření a odeslání formuláře
Integrace React Hook Form a Zod pro ověřování formulářů ve vašich aplikacích React zlepšuje integritu dat a uživatelský zážitek. Kombinací ověřování na straně klienta se zpracováním na straně serveru pomocí Node.js a Express vytvoříte robustní řešení pro zpracování odesílání formulářů. Tento přístup zajišťuje, že data jsou řádně ověřena a bezpečně zpracována, což snižuje chyby a zvyšuje spolehlivost. Implementace těchto postupů může výrazně zlepšit funkčnost a zabezpečení vašich webových formulářů.