Улучшите форму электронной почты с помощью проверки
Реализация проверки формы в 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?
- Используйте функцию 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, вы создаете надежное решение для обработки отправки форм. Такой подход гарантирует, что данные правильно проверяются и безопасно обрабатываются, уменьшая количество ошибок и повышая надежность. Внедрение этих методов может значительно улучшить функциональность и безопасность ваших веб-форм.