Integrirajte React Hook Form in Zod v obstoječo e-poštno funkcijo

Temp mail SuperHeros
Integrirajte React Hook Form in Zod v obstoječo e-poštno funkcijo
Integrirajte React Hook Form in Zod v obstoječo e-poštno funkcijo

Izboljšajte svoj e-poštni obrazec s preverjanjem

Implementacija validacije obrazca v Reactu je lahko izziv, zlasti pri integraciji React Hook Form z drugimi knjižnicami. V tem priročniku bomo raziskali, kako dodati obrazec React Hook in preverjanje Zod obstoječi funkciji kontaktnega obrazca za e-pošto.

Z upoštevanjem tega pristopa po korakih se boste naučili izboljšati funkcionalnost svojega obrazca in tako zagotoviti, da bo vaš e-poštni kontaktni obrazec robusten in zanesljiv. Poglobimo se v postopek in poskrbimo za brezhibno preverjanje obrazca.

Ukaz Opis
useForm Kavelj, ki ga nudi React Hook Form za obravnavo stanja in preverjanja obrazca.
zodResolver Funkcija razreševalnika za integracijo validacije sheme Zod z obrazcem React Hook.
renderToStaticMarkup Funkcija s strežnika React DOM za upodabljanje komponent React v statične nize HTML.
nodemailer.createTransport Ustvari transportni objekt za pošiljanje e-pošte z uporabo Nodemailerja.
bodyParser.json Vmesna programska oprema za razčlenjevanje teles zahtev JSON v Expressu.
transporter.sendMail Funkcija za pošiljanje e-pošte z uporabo konfiguriranega transportnega objekta v Nodemailerju.
replyTo Možnost v Nodemailerju za nastavitev naslova za odgovor na e-pošto.

Implementacija validacije in funkcionalnosti e-pošte

Frontend skript integrira React Hook Form in Zod za preverjanje obrazca. Kavelj useForm obravnava stanje obrazca, funkcija zodResolver pa poveže validacijo Zod z obrazcem. Ko je obrazec oddan, funkcija handleSubmit obdela podatke. Funkcija renderToStaticMarkup pretvori komponente React v statične nize HTML, ki se nato uporabijo za ustvarjanje vsebine e-pošte. Ta nastavitev zagotavlja, da so podatki potrjeni pred pošiljanjem e-pošte, kar zagotavlja zanesljivo preverjanje na strani odjemalca.

Zaledni skript je zgrajen z uporabo Node.js z Express. Vmesna programska oprema bodyParser.json razčleni telesa zahtev JSON, nodemailer.createTransport pa konfigurira storitev prenosa e-pošte. Ko je zadeta končna točka API-ja, funkcija transporter.sendMail pošlje e-pošto z uporabo navedenih podrobnosti. Možnost replyTo nastavi naslov za odgovor, kar zagotavlja pravilno e-poštno komunikacijo. Ta kombinacija čelnih in zalednih skriptov zagotavlja celovito rešitev za oddajo obrazcev in e-poštno funkcijo s preverjanjem veljavnosti.

Integracija obrazca React Hook in Zod za preverjanje e-pošte

Frontend: React z React Hook Form in Zodom

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;

Nastavitev ozadja za pošiljanje e-pošte

Zaledje: Node.js z Expressom

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

Integracija validacije na strani odjemalca in na strani strežnika

Za učinkovito obravnavo preverjanja obrazcev in funkcionalnosti e-pošte je ključnega pomena, da integrirate tako preverjanje na strani odjemalca kot na strani strežnika. Medtem ko preverjanje na strani odjemalca zagotavlja boljšo uporabniško izkušnjo z zagotavljanjem takojšnje povratne informacije, je preverjanje na strani strežnika bistveno za ohranjanje celovitosti in varnosti podatkov. Uporaba React Hook Form z Zod na strani odjemalca vam omogoča definiranje shem in učinkovito preverjanje uporabniških vnosov. Ta pristop preprečuje, da bi bili neveljavni podatki obdelani in poslani strežniku, kar zmanjša število napak in izboljša kakovost podatkov.

Na strani strežnika uporaba Express z vmesno programsko opremo, kot sta body-parser in Nodemailer, zagotavlja, da lahko zaledje varno obravnava in obdeluje podatke. Preverjanje na strani strežnika deluje kot druga plast obrambe in preverja, ali so prejeti podatki v skladu s pričakovano obliko in vrednostmi. Ta dvoslojna strategija preverjanja je robustna in celovita ter zagotavlja varno in uporabniku prijazno izkušnjo.

Pogosto zastavljena vprašanja o integraciji React Hook Form in Zoda

  1. Kako integriram React Hook Form z Zod?
  2. Uporabite funkcijo zodResolver iz paketa @hookform/resolvers/zod za povezavo validacije Zod z React Hook Form.
  3. Kaj je namen renderToStaticMarkup?
  4. renderToStaticMarkup pretvori komponente React v statične nize HTML, ki se lahko uporabljajo za vsebino e-pošte ali druge potrebe statičnega HTML.
  5. Kako lahko obravnavam oddajo obrazca z React Hook Form?
  6. Uporabite funkcijo handleSubmit iz React Hook Form za upravljanje oddaje obrazcev in preverjanje podatkov pred obdelavo.
  7. Kaj počne nodemailer.createTransport?
  8. nodemailer.createTransport ustvari transportni objekt za pošiljanje e-pošte z uporabo določene storitve in podrobnosti za preverjanje pristnosti.
  9. Zakaj je preverjanje na strani strežnika pomembno?
  10. Preverjanje na strani strežnika zagotavlja, da so podatki, ki jih prejme strežnik, veljavni, ohranja celovitost podatkov in ščiti pred zlonamernimi vnosi.

Končne misli o preverjanju obrazca in predložitvi

Integracija React Hook Form in Zod za preverjanje obrazcev v vaših aplikacijah React izboljša celovitost podatkov in uporabniško izkušnjo. S kombinacijo preverjanja veljavnosti na strani odjemalca z obdelavo na strani strežnika z uporabo Node.js in Express ustvarite robustno rešitev za obravnavanje predložitev obrazcev. Ta pristop zagotavlja, da so podatki pravilno potrjeni in varno obdelani, kar zmanjšuje napake in izboljšuje zanesljivost. Izvajanje teh praks lahko bistveno izboljša funkcionalnost in varnost vaših spletnih obrazcev.