Ở phía Frontend, xác thực dữ liệu được thực hiện trực tiếp trên trình duyệt, giúp phát hiện lỗi sớm và cung cấp phản hồi tức thì cho người dùng. Với dự án này thường được thực hiện bằng thư viện zod
kết hợp với các thư viện quản lý form như React Hook Form.
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import * as z from "zod";
const schema = z.object({
id: z.string()
.regex(/^\\d{8}$/, { message: "Mã sinh viên phải gồm 8 chữ số" })
.nonempty("Bắt buộc nhập mã sinh viên"),
fullName: z.string()
.max(100, "Tên không quá 100 ký tự")
.nonempty("Bắt buộc nhập họ tên"),
dateOfBirth: z.coerce.date({ required_error: "Bắt buộc nhập ngày sinh" }),
// ... các trường khác
});
export default function StudentForm() {
const { register, handleSubmit, formState: { errors } } = useForm<z.infer<typeof schema>>({
resolver: zodResolver(schema)
});
// ...existing code...
}
Giải thích:
schema
: Định nghĩa các quy tắc kiểm tra dữ liệu cho từng trường.useForm
+ zodResolver
: Kết hợp React Hook Form với Yup để tự động kiểm tra dữ liệu khi người dùng nhập.Lưu ý: Validation ở frontend chỉ hỗ trợ, không thay thế cho validation ở backend.