Uzlabojiet savu e-pasta veidlapu ar validāciju
Veidlapu validācijas ieviešana programmā React var būt sarežģīta, it īpaši, integrējot React Hook Form ar citām bibliotēkām. Šajā rokasgrāmatā mēs izpētīsim, kā esošai e-pasta saziņas veidlapas funkcijai pievienot React Hook Form un Zod validāciju.
Ievērojot šo soli pa solim pieejamo pieeju, jūs uzzināsit, kā uzlabot savas veidlapas funkcionalitāti, nodrošinot, ka jūsu e-pasta saziņas veidlapa ir izturīga un uzticama. Iedziļināsimies procesā un padarīsim jūsu veidlapas validāciju nevainojamu.
Komanda | Apraksts |
---|---|
useForm | Āķis, ko nodrošina React Hook Form, lai apstrādātu veidlapas stāvokli un validāciju. |
zodResolver | Atrisinātāja funkcija, lai integrētu Zod shēmas validāciju ar React Hook formu. |
renderToStaticMarkup | Funkcija no React DOM Server, lai renderētu React komponentus statiskās HTML virknēs. |
nodemailer.createTransport | Izveido transporta objektu, lai nosūtītu e-pastus, izmantojot Nodemailer. |
bodyParser.json | Starpprogrammatūra JSON pieprasījuma pamattekstu parsēšanai pakalpojumā Express. |
transporter.sendMail | Funkcija e-pasta ziņojumu sūtīšanai, izmantojot konfigurēto transporta objektu programmā Nodemailer. |
replyTo | Nodemailer opcija, lai iestatītu e-pasta atbildes adresi. |
Validācijas un e-pasta funkcionalitātes ieviešana
Priekšgala skripts integrē React Hook Form un Zod veidlapas validācijai. useForm āķis apstrādā veidlapas stāvokli, un funkcija zodResolver savieno Zod validāciju ar veidlapu. Kad veidlapa ir iesniegta, funkcija handleSubmit apstrādā datus. Funkcija renderToStaticMarkup pārvērš React komponentus statiskās HTML virknēs, kuras pēc tam tiek izmantotas e-pasta satura ģenerēšanai. Šī iestatīšana nodrošina datu validāciju pirms e-pasta nosūtīšanas, nodrošinot spēcīgu klienta puses validāciju.
Aizmugursistēmas skripts ir izveidots, izmantojot Node.js ar Express. bodyParser.json starpprogrammatūra parsē JSON pieprasījuma pamattekstus, un nodemailer.createTransport konfigurē e-pasta transportēšanas pakalpojumu. Kad tiek sasniegts API galapunkts, funkcija transporter.sendMail nosūta e-pastu, izmantojot norādīto informāciju. Opcija replyTo iestata atbildes adresi, nodrošinot pareizu e-pasta saziņu. Šī priekšgala un aizmugursistēmas skriptu kombinācija nodrošina visaptverošu risinājumu veidlapu iesniegšanas un e-pasta funkcionalitātes apstrādei ar validāciju.
React Hook veidlapas un Zod integrēšana e-pasta apstiprināšanai
Frontend: reaģējiet ar React Hook Form un 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;
Aizmugursistēmas iestatīšana e-pasta sūtīšanai
Aizmugursistēma: Node.js ar 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');
});
Klienta un servera puses validācijas integrēšana
Lai efektīvi apstrādātu veidlapu validāciju un e-pasta funkcionalitāti, ir ļoti svarīgi integrēt gan klienta, gan servera puses validāciju. Lai gan klienta puses validācija nodrošina labāku lietotāja pieredzi, sniedzot tūlītēju atgriezenisko saiti, servera puses validācija ir būtiska datu integritātes un drošības uzturēšanai. Izmantojot React Hook Form ar Zod klienta pusē, varat efektīvi definēt shēmas un apstiprināt lietotāja ievadītos datus. Šī pieeja novērš nederīgu datu apstrādi un nosūtīšanu uz serveri, samazinot kļūdas un uzlabojot datu kvalitāti.
Servera pusē, izmantojot Express ar starpprogrammatūru, piemēram, body-parser un Nodemailer, tiek nodrošināts, ka aizmugursistēma var droši apstrādāt un apstrādāt datus. Servera puses validācija darbojas kā otrais aizsardzības slānis, pārbaudot, vai saņemtie dati atbilst paredzētajam formātam un vērtībām. Šī divslāņu validācijas stratēģija ir izturīga un visaptveroša, nodrošinot drošu un lietotājam draudzīgu pieredzi.
Bieži uzdotie jautājumi par React Hook Form un Zod integrēšanu
- Kā integrēt React Hook Form ar Zod?
- Izmantojiet zodResolver funkciju no pakotnes @hookform/resolvers/zod, lai savienotu Zod validāciju ar React Hook Form.
- Kāds ir renderToStaticMarkup mērķis?
- renderToStaticMarkup pārvērš React komponentus statiskās HTML virknēs, kuras var izmantot e-pasta saturam vai citām statiskām HTML vajadzībām.
- Kā es varu iesniegt veidlapu, izmantojot React Hook Form?
- Izmantojiet funkciju handleSubmit no React Hook Form, lai pārvaldītu veidlapas iesniegumus un apstiprinātu datus pirms to apstrādes.
- Ko dara nodemailer.createTransport?
- nodemailer.createTransport izveido transporta objektu, lai nosūtītu e-pastus, izmantojot noteiktu pakalpojumu un autentifikācijas informāciju.
- Kāpēc servera puses validācija ir svarīga?
- Servera puses validācija nodrošina, ka servera saņemtie dati ir derīgi, saglabājot datu integritāti un aizsargājot pret ļaunprātīgu ievadi.
Pēdējās domas par veidlapu apstiprināšanu un iesniegšanu
React Hook Form un Zod integrēšana veidlapu validācijai jūsu React lietojumprogrammās uzlabo datu integritāti un lietotāja pieredzi. Apvienojot klienta puses validāciju ar servera puses apstrādi, izmantojot Node.js un Express, jūs izveidojat stabilu risinājumu veidlapu iesniegšanas apstrādei. Šī pieeja nodrošina, ka dati tiek pareizi apstiprināti un droši apstrādāti, samazinot kļūdas un uzlabojot uzticamību. Šīs prakses ieviešana var ievērojami uzlabot jūsu tīmekļa veidlapu funkcionalitāti un drošību.