Улучшите форму электронной почты с помощью проверки
Реализация проверки формы в React может оказаться сложной задачей, особенно при интеграции React Hook Form с другими библиотеками. В этом руководстве мы рассмотрим, как добавить форму React Hook и проверку Zod к существующей функции контактной формы электронной почты.
Следуя этому пошаговому подходу, вы узнаете, как улучшить функциональность вашей формы, гарантируя, что ваша контактная форма по электронной почте будет надежной и надежной. Давайте углубимся в процесс и сделаем проверку формы простой.
Команда | Описание |
---|---|
useForm | Перехватчик, предоставляемый React Hook Form для обработки состояния и проверки формы. |
zodResolver | Функция преобразователя для интеграции проверки схемы Zod с формой React Hook. |
renderToStaticMarkup | Функция React DOM Server для рендеринга компонентов 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 и 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;
Настройка серверной части для отправки электронной почты
Бэкэнд: 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, вы создаете надежное решение для обработки отправки форм. Такой подход гарантирует, что данные правильно проверяются и безопасно обрабатываются, уменьшая количество ошибок и повышая надежность. Внедрение этих методов может значительно улучшить функциональность и безопасность ваших веб-форм.