Integrējiet React Hook formu un Zod esošajā e-pasta funkcijā

Temp mail SuperHeros
Integrējiet React Hook formu un Zod esošajā e-pasta funkcijā
Integrējiet React Hook formu un Zod esošajā e-pasta funkcijā

Uzlabojiet savu e-pasta veidlapu ar validāciju

Veidlapu validācijas ieviešana programmā React var būt sarežģīta, it īpaši, integrējot React Hook Form ar citām bibliotēkām. Šajā rokasgrāmatā mēs izpētīsim, kā esošai e-pasta saziņas veidlapas funkcijai pievienot React Hook Form un Zod validāciju.

Ievērojot šo soli pa solim pieejamo pieeju, jūs uzzināsit, kā uzlabot savas veidlapas funkcionalitāti, nodrošinot, ka jūsu e-pasta saziņas veidlapa ir izturīga un uzticama. Iedziļināsimies procesā un padarīsim jūsu veidlapas validāciju nevainojamu.

Komanda Apraksts
useForm Āķis, ko nodrošina React Hook Form, lai apstrādātu veidlapas stāvokli un validāciju.
zodResolver Atrisinātāja funkcija, lai integrētu Zod shēmas validāciju ar React Hook formu.
renderToStaticMarkup Funkcija no React DOM Server, lai renderētu React komponentus statiskās HTML virknēs.
nodemailer.createTransport Izveido transporta objektu, lai nosūtītu e-pastus, izmantojot Nodemailer.
bodyParser.json Starpprogrammatūra JSON pieprasījuma pamattekstu parsēšanai pakalpojumā Express.
transporter.sendMail Funkcija e-pasta ziņojumu sūtīšanai, izmantojot konfigurēto transporta objektu programmā Nodemailer.
replyTo Nodemailer opcija, lai iestatītu e-pasta atbildes adresi.

Validācijas un e-pasta funkcionalitātes ieviešana

Priekšgala skripts integrē React Hook Form un Zod veidlapas validācijai. useForm āķis apstrādā veidlapas stāvokli, un funkcija zodResolver savieno Zod validāciju ar veidlapu. Kad veidlapa ir iesniegta, funkcija handleSubmit apstrādā datus. Funkcija renderToStaticMarkup pārvērš React komponentus statiskās HTML virknēs, kuras pēc tam tiek izmantotas e-pasta satura ģenerēšanai. Šī iestatīšana nodrošina datu validāciju pirms e-pasta nosūtīšanas, nodrošinot spēcīgu klienta puses validāciju.

Aizmugursistēmas skripts ir izveidots, izmantojot Node.js ar Express. bodyParser.json starpprogrammatūra parsē JSON pieprasījuma pamattekstus, un nodemailer.createTransport konfigurē e-pasta transportēšanas pakalpojumu. Kad tiek sasniegts API galapunkts, funkcija transporter.sendMail nosūta e-pastu, izmantojot norādīto informāciju. Opcija replyTo iestata atbildes adresi, nodrošinot pareizu e-pasta saziņu. Šī priekšgala un aizmugursistēmas skriptu kombinācija nodrošina visaptverošu risinājumu veidlapu iesniegšanas un e-pasta funkcionalitātes apstrādei ar validāciju.

React Hook veidlapas un Zod integrēšana e-pasta apstiprināšanai

Frontend: reaģējiet ar React Hook Form un 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;

Aizmugursistēmas iestatīšana e-pasta sūtīšanai

Aizmugursistēma: Node.js ar 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');
});

Klienta un servera puses validācijas integrēšana

Lai efektīvi apstrādātu veidlapu validāciju un e-pasta funkcionalitāti, ir ļoti svarīgi integrēt gan klienta, gan servera puses validāciju. Lai gan klienta puses validācija nodrošina labāku lietotāja pieredzi, sniedzot tūlītēju atgriezenisko saiti, servera puses validācija ir būtiska datu integritātes un drošības uzturēšanai. Izmantojot React Hook Form ar Zod klienta pusē, varat efektīvi definēt shēmas un apstiprināt lietotāja ievadītos datus. Šī pieeja novērš nederīgu datu apstrādi un nosūtīšanu uz serveri, samazinot kļūdas un uzlabojot datu kvalitāti.

Servera pusē, izmantojot Express ar starpprogrammatūru, piemēram, body-parser un Nodemailer, tiek nodrošināts, ka aizmugursistēma var droši apstrādāt un apstrādāt datus. Servera puses validācija darbojas kā otrais aizsardzības slānis, pārbaudot, vai saņemtie dati atbilst paredzētajam formātam un vērtībām. Šī divslāņu validācijas stratēģija ir izturīga un visaptveroša, nodrošinot drošu un lietotājam draudzīgu pieredzi.

Bieži uzdotie jautājumi par React Hook Form un Zod integrēšanu

  1. Kā integrēt React Hook Form ar Zod?
  2. Izmantojiet zodResolver funkciju no pakotnes @hookform/resolvers/zod, lai savienotu Zod validāciju ar React Hook Form.
  3. Kāds ir renderToStaticMarkup mērķis?
  4. renderToStaticMarkup pārvērš React komponentus statiskās HTML virknēs, kuras var izmantot e-pasta saturam vai citām statiskām HTML vajadzībām.
  5. Kā es varu iesniegt veidlapu, izmantojot React Hook Form?
  6. Izmantojiet funkciju handleSubmit no React Hook Form, lai pārvaldītu veidlapas iesniegumus un apstiprinātu datus pirms to apstrādes.
  7. Ko dara nodemailer.createTransport?
  8. nodemailer.createTransport izveido transporta objektu, lai nosūtītu e-pastus, izmantojot noteiktu pakalpojumu un autentifikācijas informāciju.
  9. Kāpēc servera puses validācija ir svarīga?
  10. Servera puses validācija nodrošina, ka servera saņemtie dati ir derīgi, saglabājot datu integritāti un aizsargājot pret ļaunprātīgu ievadi.

Pēdējās domas par veidlapu apstiprināšanu un iesniegšanu

React Hook Form un Zod integrēšana veidlapu validācijai jūsu React lietojumprogrammās uzlabo datu integritāti un lietotāja pieredzi. Apvienojot klienta puses validāciju ar servera puses apstrādi, izmantojot Node.js un Express, jūs izveidojat stabilu risinājumu veidlapu iesniegšanas apstrādei. Šī pieeja nodrošina, ka dati tiek pareizi apstiprināti un droši apstrādāti, samazinot kļūdas un uzlabojot uzticamību. Šīs prakses ieviešana var ievērojami uzlabot jūsu tīmekļa veidlapu funkcionalitāti un drošību.