0Pricing
React Academy · บทเรียน

การตรวจสอบสคีมาด้วย Zod

ผสานรวม @hookform/resolvers และสคีมา Zod เพื่อการตรวจสอบฟอร์มที่ปลอดภัยด้านชนิดข้อมูล

การตรวจสอบสคีมาด้วย Zod เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ในบทเรียนนี้ คุณจะผสานรวม React Hook Form กับสคีมา Zod ผ่าน @hookform/resolvers เพื่อให้ได้การตรวจสอบที่ปลอดภัยด้านชนิดข้อมูล โดยมีแหล่งข้อมูลจริงเพียงหนึ่งเดียวสำหรับทั้งฟอร์มและชนิดข้อมูล TypeScript

เหตุผลที่ควรใช้การตรวจสอบด้วยสคีมา

การกำหนดกฎการตรวจสอบแบบอินไลน์ใน register() จะมีรายละเอียดมากและนำกลับมาใช้ซ้ำได้ยาก สคีมา Zod จะกำหนดการตรวจสอบ ALL ไว้ในที่เดียว อนุมานชนิดข้อมูล TypeScript โดยอัตโนมัติ และแชร์ระหว่างส่วนหน้าและส่วนหลังได้

การติดตั้ง

ติดตั้ง Zod และแพ็กเกจตัวแก้ไข RHF
npm install zod @hookform/resolvers

การกำหนดสคีมา Zod

ใช้ z.object() เพื่อกำหนดโครงสร้างฟอร์ม แต่ละฟิลด์จะใช้ชนิดข้อมูลของ Zod พร้อมเมธอดการตรวจสอบที่เรียกต่อกันได้
import { z } from 'zod';

const loginSchema = z.object({
  email: z.string().email('Invalid email'),
  password: z.string().min(8, 'At least 8 characters'),
});

การอนุมานชนิดข้อมูล TypeScript

ใช้ z.infer เพื่อสร้างชนิดข้อมูล TypeScript จากสคีมา Zod โดยอัตโนมัติ ไม่จำเป็นต้องกำหนด interface แยกต่างหาก
type LoginForm = z.infer<typeof loginSchema>;
// { email: string; password: string }

การเชื่อมต่อกับ useForm ผ่าน resolver

ส่ง zodResolver(schema) ให้ตัวเลือก resolver ของ useForm RHF จะใช้ Zod ตรวจสอบฟอร์มแทนกฎแบบอินไลน์
import { zodResolver } from '@hookform/resolvers/zod';

const { register, handleSubmit, formState } = useForm<LoginForm>({
  resolver: zodResolver(loginSchema),
});

ไม่ต้องใช้กฎแบบอินไลน์อีกต่อไป

เมื่อใช้ zodResolver คุณไม่จำเป็นต้องส่ง rules ให้ register() อีก เพียงเรียก register('fieldName') โดยไม่ต้องมีอาร์กิวเมนต์ตัวที่สอง Zod จะจัดการการตรวจสอบทั้งหมดให้
<input {...register('email')} />
{errors.email && <p>{errors.email.message}</p>}

การตรวจสอบความถูกต้องของ Zod ขั้นสูง

Zod รองรับการตรวจสอบความถูกต้องที่ทรงพลัง ได้แก่ url(), uuid(), regex(), refine() สำหรับตรรกะแบบกำหนดเอง และ superRefine() สำหรับการตรวจสอบความถูกต้องระหว่างฟิลด์
const schema = z.object({
  url: z.string().url('Must be a valid URL'),
  confirmPassword: z.string(),
}).refine(
  data => data.password === data.confirmPassword,
  { message: 'Passwords must match', path: ['confirmPassword'] }
);

การตรวจสอบความถูกต้องระหว่างฟิลด์

refine() หรือ superRefine() ของ Zod สามารถเข้าถึงค่าของทุกฟิลด์ได้ จึงรองรับกฎระหว่างฟิลด์ เช่น 'วันที่สิ้นสุดต้องอยู่หลังวันที่เริ่มต้น'
const schema = z.object({
  start: z.string(),
  end: z.string(),
}).refine(d => d.end > d.start, {
  message: 'End must be after start',
  path: ['end'],
});

การใช้ Schema ร่วมกับระบบหลังบ้าน

ในโครงการ TypeScript แบบฟูลสแตก ให้ส่งออก schema ของ Zod จากโมดูลที่ใช้ร่วมกัน แล้วใช้ schema นี้ทั้งในแบบฟอร์ม React และตัวจัดการ API ของ Node.js/Next.js เพื่อให้การตรวจสอบความถูกต้องสอดคล้องกัน
// shared/schemas.ts
export const loginSchema = z.object({ ... });

// frontend — import and use as resolver
// backend — import and call .parse() on request body

ตรวจสอบความเข้าใจ

ข้อได้เปรียบหลักของการใช้ z.infer เป็นชนิดของแบบฟอร์มใน TypeScript คืออะไร

สรุปทบทวน

กำหนด schema ของ Zod อนุมานชนิด TypeScript ด้วย z.infer ส่ง zodResolver ให้ useForm และลบกฎการตรวจสอบความถูกต้องที่เขียนไว้ในบรรทัดออก ใช้ refine() สำหรับการตรวจสอบความถูกต้องระหว่างฟิลด์ และใช้ schema ร่วมกันระหว่างส่วนหน้าบ้านกับส่วนหลังบ้าน

บทเรียนถัดไป

บทเรียนถัดไป: **ฟิลด์แบบไดนามิกด้วย useFieldArray** — คุณจะเพิ่ม ลบ และจัดลำดับฟิลด์แบบไดนามิกใหม่โดยใช้ฮุก useFieldArray

คำถามที่พบบ่อย

บทเรียน “การตรวจสอบสคีมาด้วย Zod” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตรวจสอบสคีมาด้วย Zod” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบสคีมาด้วย Zod”

ผสานรวม @hookform/resolvers และสคีมา Zod เพื่อการตรวจสอบฟอร์มที่ปลอดภัยด้านชนิดข้อมูล คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การตรวจสอบสคีมาด้วย Zod” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เริ่มต้นใช้งาน React Hook Form
  2. กฎการตรวจสอบและข้อความแสดงข้อผิดพลาด
  3. การตรวจสอบสคีมาด้วย Zod
  4. ช่องฟอร์มแบบไดนามิกด้วย useFieldArray
← กลับไปที่ React Academy