Zintegruj formularz React Hook i Zod z istniejącą funkcją poczty e-mail

Temp mail SuperHeros
Zintegruj formularz React Hook i Zod z istniejącą funkcją poczty e-mail
Zintegruj formularz React Hook i Zod z istniejącą funkcją poczty e-mail

Ulepsz swój formularz e-mailowy za pomocą walidacji

Implementacja walidacji formularzy w React może być wyzwaniem, szczególnie w przypadku integracji React Hook Form z innymi bibliotekami. W tym przewodniku omówimy, jak dodać formularz React Hook i weryfikację ZOD do istniejącej funkcji formularza kontaktowego e-mail.

Postępując zgodnie z tym podejściem krok po kroku, dowiesz się, jak ulepszyć funkcjonalność formularza, zapewniając, że formularz kontaktowy e-mail będzie solidny i niezawodny. Przyjrzyjmy się procesowi i spraw, aby weryfikacja formularza przebiegała bezproblemowo.

Komenda Opis
useForm Hak udostępniany przez React Hook Form do obsługi stanu formularza i sprawdzania poprawności.
zodResolver Funkcja rozpoznawania nazw integrująca sprawdzanie poprawności schematu Zoda z formularzem React Hook.
renderToStaticMarkup Funkcja z serwera React DOM służąca do renderowania komponentów React do statycznych ciągów HTML.
nodemailer.createTransport Tworzy obiekt transportowy do wysyłania wiadomości e-mail za pomocą Nodemailera.
bodyParser.json Oprogramowanie pośredniczące do analizowania treści żądań JSON w Express.
transporter.sendMail Funkcja wysyłania wiadomości e-mail przy użyciu skonfigurowanego obiektu transportowego w Nodemailerze.
replyTo Opcja w Nodemailerze umożliwiająca ustawienie adresu zwrotnego na wiadomość e-mail.

Wdrażanie funkcji walidacji i poczty e-mail

Skrypt frontendowy integruje React Hook Form i Zod w celu sprawdzania poprawności formularzy. Hak useForm obsługuje stan formularza, a funkcja zodResolver łączy walidację Zod z formularzem. Po przesłaniu formularza funkcja handleSubmit przetwarza dane. Funkcja renderToStaticMarkup konwertuje komponenty React na statyczne ciągi HTML, które są następnie wykorzystywane do generowania treści wiadomości e-mail. Ta konfiguracja zapewnia weryfikację danych przed wysłaniem wiadomości e-mail, zapewniając solidną weryfikację po stronie klienta.

Skrypt backendu jest zbudowany przy użyciu Node.js i Express. Oprogramowanie pośredniczące bodyParser.json analizuje treści żądań JSON, a nodemailer.createTransport konfiguruje usługę transportu poczty e-mail. Po trafieniu w punkt końcowy API funkcja transporter.sendMail wysyła wiadomość e-mail przy użyciu podanych danych. Opcja replyTo ustawia adres zwrotny, zapewniając prawidłową komunikację e-mail. Ta kombinacja skryptów frontendowych i backendowych zapewnia kompleksowe rozwiązanie do obsługi funkcji przesyłania formularzy i poczty e-mail z walidacją.

Integracja formularza React Hook i Zoda do sprawdzania poprawności wiadomości e-mail

Frontend: Reaguj za pomocą React Hook Form i Zoda

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;

Konfigurowanie backendu do wysyłania wiadomości e-mail

Backend: Node.js z Expressem

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');
});

Integracja walidacji po stronie klienta i serwera

Aby skutecznie obsługiwać funkcję sprawdzania poprawności formularzy i poczty e-mail, kluczowa jest integracja sprawdzania poprawności po stronie klienta i serwera. Podczas gdy weryfikacja po stronie klienta zapewnia lepszą obsługę użytkownika poprzez natychmiastowe przesyłanie informacji zwrotnych, weryfikacja po stronie serwera jest niezbędna do utrzymania integralności i bezpieczeństwa danych. Używanie React Hook Form z Zod po stronie klienta pozwala na definiowanie schematów i sprawną walidację danych wejściowych użytkownika. Takie podejście zapobiega przetwarzaniu i wysyłaniu nieprawidłowych danych na serwer, minimalizując błędy i poprawiając jakość danych.

Po stronie serwera użycie Express z oprogramowaniem pośredniczącym, takim jak body-parser i Nodemailer zapewnia, że ​​backend może bezpiecznie obsługiwać i przetwarzać dane. Walidacja po stronie serwera działa jako druga warstwa obrony, weryfikując, czy otrzymane dane są zgodne z oczekiwanym formatem i wartościami. Ta dwuwarstwowa strategia walidacji jest solidna i wszechstronna, zapewniając bezpieczne i przyjazne dla użytkownika doświadczenie.

Często zadawane pytania dotyczące integracji React Hook Form i Zoda

  1. Jak zintegrować React Hook Form z Zod?
  2. Użyj funkcji zodResolver z pakietu @hookform/resolvers/zod, aby połączyć walidację Zod z React Hook Form.
  3. Jaki jest cel renderToStaticMarkup?
  4. renderToStaticMarkup konwertuje komponenty React na statyczne ciągi HTML, których można używać w treści e-maili lub innych statycznych potrzebach HTML.
  5. Jak mogę obsłużyć przesyłanie formularza za pomocą Formularza React Hook?
  6. Użyj funkcji handleSubmit z React Hook Form, aby zarządzać przesyłaniem formularzy i weryfikować dane przed ich przetworzeniem.
  7. Co robi nodemailer.createTransport?
  8. nodemailer.createTransport tworzy obiekt transportowy do wysyłania wiadomości e-mail przy użyciu określonej usługi i szczegółów uwierzytelniania.
  9. Dlaczego weryfikacja po stronie serwera jest ważna?
  10. Weryfikacja po stronie serwera zapewnia, że ​​dane otrzymane przez serwer są prawidłowe, zachowując integralność danych i chroniąc przed złośliwymi danymi wejściowymi.

Końcowe przemyślenia na temat sprawdzania poprawności i przesyłania formularzy

Integracja React Hook Form i Zod do sprawdzania poprawności formularzy w aplikacjach React zwiększa integralność danych i wygodę użytkownika. Łącząc weryfikację po stronie klienta z przetwarzaniem po stronie serwera przy użyciu Node.js i Express, tworzysz solidne rozwiązanie do obsługi przesyłania formularzy. Takie podejście zapewnia właściwą walidację i bezpieczne przetwarzanie danych, ograniczając liczbę błędów i zwiększając niezawodność. Wdrożenie tych praktyk może znacząco poprawić funkcjonalność i bezpieczeństwo Twoich formularzy internetowych.