Покращіть свою форму електронної пошти за допомогою перевірки
Реалізація перевірки форми в React може бути складною, особливо при інтеграції React Hook Form з іншими бібліотеками. У цьому посібнику ми розглянемо, як додати форму React Hook і перевірку Zod до наявної функції контактної форми електронної пошти.
Дотримуючись цього покрокового підходу, ви дізнаєтеся, як покращити функціональність вашої форми, гарантуючи, що ваша контактна форма електронної пошти є надійною та надійною. Давайте зануримося в процес і зробимо перевірку вашої форми безперебійною.
Команда | опис |
---|---|
useForm | Хук, наданий React Hook Form для обробки стану та перевірки форми. |
zodResolver | Функція резолвера для інтеграції перевірки схеми Zod із формою React Hook. |
renderToStaticMarkup | Функція з сервера React DOM для рендерингу компонентів React у статичні рядки HTML. |
nodemailer.createTransport | Створює транспортний об’єкт для надсилання електронних листів за допомогою Nodemailer. |
bodyParser.json | Проміжне програмне забезпечення для розбору тіл запитів JSON у Express. |
transporter.sendMail | Функція надсилання електронних листів за допомогою налаштованого транспортного об’єкта в Nodemailer. |
replyTo | Опція в Nodemailer для встановлення адреси для відповіді на електронний лист. |
Реалізація функцій перевірки та електронної пошти
Інтерфейсний скрипт інтегрує React Hook Form і Zod для перевірки форми. Хук useForm обробляє стан форми, а функція zodResolver підключає перевірку Zod до форми. Коли форма надсилається, функція handleSubmit обробляє дані. Функція renderToStaticMarkup перетворює компоненти React у статичні рядки HTML, які потім використовуються для генерації вмісту електронної пошти. Це налаштування гарантує перевірку даних перед надсиланням електронного листа, забезпечуючи надійну перевірку на стороні клієнта.
Серверний сценарій створено за допомогою Node.js з Express. Проміжне програмне забезпечення bodyParser.json аналізує тіла запиту JSON, а nodemailer.createTransport налаштовує службу транспортування електронної пошти. Коли кінцева точка API потрапляє, функція transporter.sendMail надсилає електронний лист із використанням наданих даних. Опція replyTo встановлює адресу для відповіді, забезпечуючи належний зв’язок електронною поштою. Ця комбінація сценаріїв інтерфейсу та серверної частини забезпечує комплексне рішення для роботи з надсиланням форм і функцією електронної пошти з перевіркою.
Інтеграція React Hook Form і Zod для перевірки електронної пошти
Інтерфейс: React з React Hook Form і 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;
Налаштування серверної частини для надсилання електронної пошти
Backend: Node.js з 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');
});
Інтеграція перевірки на стороні клієнта та на стороні сервера
Для ефективної перевірки форм і електронної пошти важливо інтегрувати перевірку як на стороні клієнта, так і на стороні сервера. Хоча перевірка на стороні клієнта забезпечує кращий досвід роботи з користувачем, надаючи негайний зворотний зв’язок, перевірка на стороні сервера є важливою для підтримки цілісності та безпеки даних. Використання React Hook Form із Zod на стороні клієнта дозволяє визначати схеми та ефективно перевіряти введені користувачем дані. Цей підхід запобігає обробці та надсиланню на сервер недійсних даних, мінімізуючи помилки та покращуючи якість даних.
На стороні сервера використання Express із проміжним програмним забезпеченням, таким як body-parser і Nodemailer, гарантує, що серверна частина може безпечно обробляти та обробляти дані. Перевірка на стороні сервера діє як другий рівень захисту, перевіряючи, що отримані дані відповідають очікуваному формату та значенням. Ця дворівнева стратегія перевірки є надійною та комплексною, забезпечуючи безпечний і зручний досвід.
Часті запитання щодо інтеграції React Hook Form і Zod
- Як інтегрувати React Hook Form із Zod?
- Використовуйте функцію zodResolver з пакету @hookform/resolvers/zod, щоб підключити перевірку Zod до React Hook Form.
- Яка мета renderToStaticMarkup?
- renderToStaticMarkup перетворює компоненти React у статичні рядки HTML, які можна використовувати для вмісту електронної пошти чи інших потреб у статичному HTML.
- Як я можу надсилати форму за допомогою React Hook Form?
- Використовуйте функцію handleSubmit із React Hook Form, щоб керувати надсиланням форм і перевіряти дані перед їх обробкою.
- Що робить nodemailer.createTransport?
- nodemailer.createTransport створює транспортний об’єкт для надсилання електронних листів за допомогою вказаної служби та даних автентифікації.
- Чому перевірка на стороні сервера важлива?
- Перевірка на стороні сервера гарантує, що отримані сервером дані є дійсними, зберігаючи цілісність даних і захищаючи від зловмисного введення.
Останні думки щодо перевірки та подання форми
Інтеграція React Hook Form і Zod для перевірки форм у ваших програмах React покращує цілісність даних і покращує взаємодію з користувачем. Поєднуючи перевірку на стороні клієнта з обробкою на стороні сервера за допомогою Node.js і Express, ви створюєте надійне рішення для обробки надсилання форм. Такий підхід гарантує належну перевірку та безпечну обробку даних, що зменшує кількість помилок і підвищує надійність. Застосування цих методів може значно покращити функціональність і безпеку ваших веб-форм.