دمج نموذج React Hook وZod في وظيفة البريد الإلكتروني الموجودة

دمج نموذج React Hook وZod في وظيفة البريد الإلكتروني الموجودة
دمج نموذج React Hook وZod في وظيفة البريد الإلكتروني الموجودة

تعزيز نموذج البريد الإلكتروني الخاص بك مع التحقق من الصحة

قد يكون تنفيذ التحقق من صحة النموذج في React أمرًا صعبًا، خاصة عند دمج React Hook Form مع المكتبات الأخرى. في هذا الدليل، سنستكشف كيفية إضافة نموذج React Hook والتحقق من Zod إلى وظيفة نموذج اتصال البريد الإلكتروني الموجودة.

باتباع هذا النهج خطوة بخطوة، ستتعلم كيفية تحسين وظائف النموذج الخاص بك، مما يضمن أن نموذج الاتصال بالبريد الإلكتروني الخاص بك قوي وموثوق. دعنا نتعمق في العملية ونجعل التحقق من صحة النموذج الخاص بك سلسًا.

يأمر وصف
useForm خطاف يوفره React Hook Form للتعامل مع حالة النموذج والتحقق من صحته.
zodResolver وظيفة محلل لدمج التحقق من صحة مخطط Zod مع React Hook Form.
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 بتكوين خدمة نقل البريد الإلكتروني. عند الوصول إلى نقطة نهاية واجهة برمجة التطبيقات، ترسل وظيفة transporter.sendMail البريد الإلكتروني باستخدام التفاصيل المقدمة. يقوم خيار الرد على بتعيين عنوان الرد، مما يضمن التواصل الصحيح عبر البريد الإلكتروني. يوفر هذا المزيج من البرامج النصية للواجهة الأمامية والخلفية حلاً شاملاً للتعامل مع إرسال النماذج ووظائف البريد الإلكتروني مع التحقق من الصحة.

دمج نموذج React Hook وZod للتحقق من صحة البريد الإلكتروني

الواجهة الأمامية: التفاعل باستخدام نموذج React Hook و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 وZod

  1. كيف يمكنني دمج React Hook Form مع Zod؟
  2. استخدم وظيفة zodResolver من الحزمة @hookform/resolvers/zod لربط التحقق من صحة Zod مع React Hook Form.
  3. ما هو الغرض من renderToStaticMarkup؟
  4. renderToStaticMarkup يحول مكونات React إلى سلاسل HTML ثابتة، والتي يمكن استخدامها لمحتوى البريد الإلكتروني أو احتياجات HTML الثابتة الأخرى.
  5. كيف يمكنني التعامل مع إرسال النموذج باستخدام React Hook Form؟
  6. استخدم وظيفة handleSubmit من React Hook Form لإدارة عمليات إرسال النماذج والتحقق من صحة البيانات قبل معالجتها.
  7. ماذا يفعل nodemailer.createTransport؟
  8. nodemailer.createTransport ينشئ كائن نقل لإرسال رسائل البريد الإلكتروني باستخدام خدمة محددة وتفاصيل المصادقة.
  9. ما سبب أهمية التحقق من جانب الخادم؟
  10. يضمن التحقق من جانب الخادم أن البيانات التي يتلقاها الخادم صالحة، ويحافظ على سلامة البيانات ويحميها من المدخلات الضارة.

الأفكار النهائية حول التحقق من صحة النموذج وتقديمه

يؤدي دمج React Hook Form وZod للتحقق من صحة النموذج في تطبيقات React إلى تحسين تكامل البيانات وتجربة المستخدم. من خلال الجمع بين التحقق من جانب العميل والمعالجة من جانب الخادم باستخدام Node.js وExpress، يمكنك إنشاء حل قوي للتعامل مع عمليات إرسال النماذج. ويضمن هذا النهج التحقق من صحة البيانات بشكل صحيح ومعالجتها بشكل آمن، مما يقلل الأخطاء ويحسن الموثوقية. يمكن أن يؤدي تنفيذ هذه الممارسات إلى تحسين وظائف وأمان نماذج الويب الخاصة بك بشكل كبير.