Integrujte React Hook Form a Zod do stávající funkce e-mailu

Temp mail SuperHeros
Integrujte React Hook Form a Zod do stávající funkce e-mailu
Integrujte React Hook Form a Zod do stávající funkce e-mailu

Vylepšete svůj e-mailový formulář o ověření

Implementace ověřování formulářů v Reactu může být náročná, zejména při integraci React Hook Form s jinými knihovnami. V této příručce prozkoumáme, jak přidat React Hook Form a Zod ověření do existující funkce e-mailového kontaktního formuláře.

Dodržováním tohoto podrobného přístupu se naučíte, jak vylepšit funkčnost formuláře a zajistit, aby byl váš e-mailový kontaktní formulář robustní a spolehlivý. Pojďme se ponořit do procesu a zajistit bezproblémovou validaci formuláře.

Příkaz Popis
useForm Hák poskytovaný React Hook Form pro zpracování stavu formuláře a ověření.
zodResolver Funkce resolveru pro integraci ověření schématu Zod s formulářem React Hook.
renderToStaticMarkup Funkce ze serveru React DOM Server k vykreslení komponent React na statické řetězce HTML.
nodemailer.createTransport Vytvoří transportní objekt pro odesílání e-mailů pomocí Nodemailer.
bodyParser.json Middleware pro analýzu těl požadavků JSON v Express.
transporter.sendMail Funkce pro odesílání e-mailů pomocí nakonfigurovaného transportního objektu v Nodemailer.
replyTo Možnost v Nodemailer nastavit adresu pro odpověď na e-mail.

Implementace funkce ověřování a e-mailu

Frontendový skript integruje React Hook Form a Zod pro ověření formuláře. Hák useForm zpracovává stav formuláře a funkce zodResolver připojuje ověření Zod k formuláři. Když je formulář odeslán, funkce handleSubmit zpracuje data. Funkce renderToStaticMarkup převádí komponenty React na statické HTML řetězce, které se pak používají ke generování obsahu e-mailu. Toto nastavení zajišťuje ověření dat před odesláním e-mailu a poskytuje robustní ověření na straně klienta.

Backendový skript je vytvořen pomocí Node.js s Express. Middleware bodyParser.json analyzuje těla požadavků JSON a nodemailer.createTransport konfiguruje službu přenosu e-mailů. Když je dosaženo koncového bodu API, funkce transporter.sendMail odešle e-mail pomocí poskytnutých podrobností. Možnost replyTo nastavuje adresu pro odpověď a zajišťuje správnou e-mailovou komunikaci. Tato kombinace frontendových a backendových skriptů poskytuje komplexní řešení pro zpracování odesílání formulářů a e-mailové funkce s ověřováním.

Integrace formuláře React Hook a Zod pro ověření e-mailu

Frontend: Reagujte pomocí React Hook Form a 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;

Nastavení backendu pro odesílání e-mailů

Backend: Node.js s 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');
});

Integrace ověřování na straně klienta a na straně serveru

Aby bylo možné efektivně zvládnout ověřování formulářů a e-mailové funkce, je zásadní integrovat ověřování na straně klienta i serveru. Zatímco ověřování na straně klienta zajišťuje lepší uživatelskou zkušenost tím, že poskytuje okamžitou zpětnou vazbu, ověřování na straně serveru je nezbytné pro zachování integrity a zabezpečení dat. Použití React Hook Form s Zod na straně klienta vám umožňuje definovat schémata a efektivně ověřovat uživatelské vstupy. Tento přístup zabraňuje zpracování neplatných dat a jejich odeslání na server, minimalizuje chyby a zvyšuje kvalitu dat.

Na straně serveru použití Express s middleware, jako je body-parser a Nodemailer zajišťuje, že backend může bezpečně zpracovávat a zpracovávat data. Ověření na straně serveru funguje jako druhá vrstva obrany a ověřuje, že přijatá data odpovídají očekávanému formátu a hodnotám. Tato dvouvrstvá strategie ověřování je robustní a komplexní a poskytuje bezpečné a uživatelsky přívětivé prostředí.

Často kladené otázky o integraci React Hook Form a Zod

  1. Jak integruji React Hook Form s Zod?
  2. Použijte funkci zodResolver z balíčku @hookform/resolvers/zod k propojení ověření Zod s React Hook Form.
  3. Jaký je účel renderToStaticMarkup?
  4. renderToStaticMarkup převádí komponenty React na statické HTML řetězce, které lze použít pro obsah e-mailů nebo jiné potřeby statického HTML.
  5. Jak mohu zpracovat odeslání formuláře pomocí React Hook Form?
  6. Pomocí funkce handleSubmit z React Hook Form můžete spravovat odesílání formulářů a ověřovat data před jejich zpracováním.
  7. Co dělá nodemailer.createTransport?
  8. nodemailer.createTransport vytvoří transportní objekt pro odesílání e-mailů pomocí zadané služby a ověřovacích podrobností.
  9. Proč je ověření na straně serveru důležité?
  10. Ověření na straně serveru zajišťuje, že data přijatá serverem jsou platná, zachovává integritu dat a chrání před škodlivými vstupy.

Závěrečné myšlenky na ověření a odeslání formuláře

Integrace React Hook Form a Zod pro ověřování formulářů ve vašich aplikacích React zlepšuje integritu dat a uživatelský zážitek. Kombinací ověřování na straně klienta se zpracováním na straně serveru pomocí Node.js a Express vytvoříte robustní řešení pro zpracování odesílání formulářů. Tento přístup zajišťuje, že data jsou řádně ověřena a bezpečně zpracována, což snižuje chyby a zvyšuje spolehlivost. Implementace těchto postupů může výrazně zlepšit funkčnost a zabezpečení vašich webových formulářů.