تكرار السؤال: …
الإجابة المختصرة
لأن React Hook Form تعتمد على النمط غير المضبوط (Uncontrolled) وتسجيل المدخلات عبر Refs، مما يمنع إعادة تصيير كامل النموذج عند كل ضغطة زر على عكس Formik التي تعتمد على الـ Controlled State.
الشرح
في Formik، يتم تحديث حالة مركزية مع كل حرف يكتبه المستخدم مما يعيد تصيير كافة حقول النموذج مسبباً ثقلاً وبطئاً ملحوظاً في الشاشات الكبيرة. بينما تسجل RHF الحقول وتستمع لأحداث التغيير محلياً، ولا تعيد تصيير سوى الحقل المعني بالخطأ فقط مع استهلاك ذاكرة منخفض للغاية.
مثال بالكود
import { useForm } from 'react-hook-form';
function LoginForm() {
const { register, handleSubmit, formState: { errors } } = useForm<{ email: string }>();
const onSubmit = (data: { email: string }) => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("email", { required: "البريد الإلكتروني مطلوب" })} />
{errors.email && <span>{errors.email.message}</span>}
<button type="submit">دخول</button>
</form>
);
}أخطاء شائعة
- استخدام watch() في أعلى المكون دون تحديد حقول معينة مما يعيد تصيير كامل المكون ويفقد ميزة RHF الأساسية.
أسئلة متابعة
- ما الفرق بين Controlled Components و Uncontrolled Components ومتى نفضل كلاً منهما؟
- كيف تدير النماذج الديناميكية التي تحتوي على مصفوفة حقول متغيرة (Dynamic Field Arrays)؟