Tingkatkan Borang E-mel Anda dengan Pengesahan
Melaksanakan pengesahan borang dalam React boleh menjadi mencabar, terutamanya apabila menyepadukan React Hook Form dengan perpustakaan lain. Dalam panduan ini, kami akan meneroka cara menambah React Hook Form dan pengesahan Zod pada fungsi borang hubungan e-mel sedia ada.
Dengan mengikuti pendekatan langkah demi langkah ini, anda akan belajar cara meningkatkan kefungsian borang anda, memastikan borang hubungan e-mel anda mantap dan boleh dipercayai. Mari selami prosesnya dan jadikan pengesahan borang anda dengan lancar.
Perintah | Penerangan |
---|---|
useForm | Cangkuk yang disediakan oleh React Hook Form untuk mengendalikan keadaan dan pengesahan borang. |
zodResolver | Fungsi penyelesai untuk menyepadukan pengesahan skema Zod dengan React Hook Form. |
renderToStaticMarkup | Fungsi daripada Pelayan DOM React untuk menjadikan komponen React kepada rentetan HTML statik. |
nodemailer.createTransport | Mencipta objek pengangkutan untuk menghantar e-mel menggunakan Nodemailer. |
bodyParser.json | Middleware untuk menghuraikan badan permintaan JSON dalam Express. |
transporter.sendMail | Berfungsi untuk menghantar e-mel menggunakan objek pengangkutan yang dikonfigurasikan dalam Nodemailer. |
replyTo | Pilihan dalam Nodemailer untuk menetapkan alamat balasan untuk e-mel. |
Melaksanakan Fungsi Pengesahan dan E-mel
Skrip frontend menyepadukan React Hook Form dan Zod untuk pengesahan borang. Cangkuk useForm mengendalikan keadaan borang, dan fungsi zodResolver menghubungkan pengesahan Zod ke borang. Apabila borang diserahkan, fungsi handleSubmit memproses data. Fungsi renderToStaticMarkup menukar komponen React kepada rentetan HTML statik, yang kemudiannya digunakan untuk menjana kandungan e-mel. Persediaan ini memastikan bahawa data disahkan sebelum e-mel dihantar, memberikan pengesahan pihak klien yang mantap.
Skrip bahagian belakang dibina menggunakan Node.js dengan Express. Perisian tengah bodyParser.json menghuraikan badan permintaan JSON dan nodemailer.createTransport mengkonfigurasi perkhidmatan pengangkutan e-mel. Apabila titik akhir API dipukul, fungsi transporter.sendMail menghantar e-mel menggunakan butiran yang diberikan. Pilihan replyTo menetapkan alamat balas-kepada, memastikan komunikasi e-mel yang betul. Gabungan skrip frontend dan backend ini menyediakan penyelesaian yang komprehensif untuk mengendalikan penyerahan borang dan fungsi e-mel dengan pengesahan.
Mengintegrasikan Borang React Hook dan Zod untuk Pengesahan E-mel
Bahagian Hadapan: React dengan React Hook Form dan 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;
Menyediakan Bahagian Belakang untuk Penghantaran E-mel
Bahagian Belakang: Node.js dengan 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');
});
Mengintegrasikan Pengesahan Bahagian Pelanggan dan Bahagian Pelayan
Untuk mengendalikan pengesahan borang dan fungsi e-mel dengan berkesan, adalah penting untuk menyepadukan kedua-dua pengesahan sisi klien dan pelayan. Walaupun pengesahan pihak klien memastikan pengalaman pengguna yang lebih baik dengan memberikan maklum balas segera, pengesahan pihak pelayan adalah penting untuk mengekalkan integriti dan keselamatan data. Menggunakan React Hook Form dengan Zod pada bahagian klien membolehkan anda mentakrif skema dan mengesahkan input pengguna dengan cekap. Pendekatan ini menghalang data tidak sah daripada diproses dan dihantar ke pelayan, meminimumkan ralat dan meningkatkan kualiti data.
Di bahagian pelayan, menggunakan Express dengan middleware seperti body-parser dan Nodemailer memastikan bahagian belakang boleh mengendalikan dan memproses data dengan selamat. Pengesahan sisi pelayan bertindak sebagai lapisan pertahanan kedua, mengesahkan bahawa data yang diterima mematuhi format dan nilai yang dijangkakan. Strategi pengesahan dwi-lapisan ini adalah teguh dan komprehensif, memberikan pengalaman yang selamat dan mesra pengguna.
Soalan Lazim tentang Mengintegrasikan React Hook Form dan Zod
- Bagaimanakah cara saya mengintegrasikan Borang Cangkuk Reaksi dengan Zod?
- Gunakan fungsi zodResolver daripada pakej @hookform/resolvers/zod untuk menyambungkan pengesahan Zod dengan React Hook Form.
- Apakah tujuan renderToStaticMarkup?
- renderToStaticMarkup menukar komponen React kepada rentetan HTML statik, yang boleh digunakan untuk kandungan e-mel atau keperluan HTML statik lain.
- Bagaimanakah saya boleh mengendalikan penyerahan borang dengan Borang React Hook?
- Gunakan fungsi handleSubmit daripada React Hook Form untuk mengurus penyerahan borang dan mengesahkan data sebelum memprosesnya.
- Apakah yang dilakukan oleh nodemailer.createTransport?
- nodemailer.createTransport mencipta objek pengangkutan untuk menghantar e-mel menggunakan perkhidmatan tertentu dan butiran pengesahan.
- Mengapakah pengesahan bahagian pelayan penting?
- Pengesahan bahagian pelayan memastikan bahawa data yang diterima oleh pelayan adalah sah, mengekalkan integriti data dan melindungi daripada input berniat jahat.
Pemikiran Akhir tentang Pengesahan dan Penyerahan Borang
Mengintegrasikan React Hook Form dan Zod untuk pengesahan borang dalam aplikasi React anda meningkatkan integriti data dan pengalaman pengguna. Dengan menggabungkan pengesahan pihak klien dengan pemprosesan sebelah pelayan menggunakan Node.js dan Express, anda mencipta penyelesaian yang mantap untuk mengendalikan penyerahan borang. Pendekatan ini memastikan bahawa data disahkan dengan betul dan diproses dengan selamat, mengurangkan ralat dan meningkatkan kebolehpercayaan. Melaksanakan amalan ini boleh meningkatkan fungsi dan keselamatan borang web anda dengan ketara.