إزاي تحترف التعامل مع النماذج (Forms) في رياكت باستخدام React Hook Form؟
لو أنت شغال بـ React بقالك فترة، أكيد مريت بلحظة "الصداع" اللي بتيجي لما تحتاج تعمل فورم كبيرة. بنقعد نستخدم الـ State لكل حقل (Input) ونكتب دوال (Functions) للـ Validation، وفجأة تلاقي الـ Component بتاعك بقى تقيل جداً، وكل حرف بتكتبه بيعمل Re-render لكل الصفحة. النهاردة هعرفك على الحل السحري اللي بيستخدمه المحترفين: مكتبة React Hook Form.
Table of contents [Show]
ليه بنعاني مع الـ Forms التقليدية؟
في الطريقة العادية، بنعمل Controlled Components، وده معناه إن كل تغيير في الـ Input بيخزن قيمة في الـ State. ده بيخلي رياكت تعيد رندر (Re-render) للـ Component مع كل ضغطة زرار، ولو الفورم كبيرة، الأداء (Performance) بيقع منك. كمان الـ Validation بياخد كود كتير جداً (Boilerplate code) وبيخلي الكود بتاعك صعب القراءة والصيانة.
إيه هي مكتبة React Hook Form؟
هي مكتبة خفيفة جداً، بتعتمد على الـ Uncontrolled Components باستخدام الـ Refs. يعني إيه؟ يعني الـ Input مش بيكلم الـ State بتاع رياكت طول الوقت، هو بيستنى لحد ما تحتاجه فعلاً. النتيجة؟ أداء أسرع بكتير، كود أنضف، ومجهود أقل في التعامل مع الـ Validation.
خطوات العمل باحترافية
عشان نبدأ، لازم نثبت المكتبة الأول:
npm install react-hook-form
بعد كدة بنستخدم الـ Hook اللي اسمه useForm. شوف المثال ده:
import { useForm } from "react-hook-form";
function MyForm() {
const { register, handleSubmit, formState: { errors } } = useForm();
const onSubmit = (data) => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("email", { required: true })} />
{errors.email && <span>الحقل ده مطلوب!</span>}
<button type="submit">إرسال</button>
</form>
);
}
مميزات الـ Validation في المكتبة
المكتبة بتدعم الـ Validation بشكل داخلي وسريع جداً. تقدر تستخدم قواعد زي required، minLength، و pattern (لـ Regex). ولو عايز تعقد الأمور شوية وتعمل Validation معقد، تقدر تربطها بمكتبة زي Yup أو Zod، ودي الحركة اللي بيعملها الـ Seniors عشان يضمنوا داتا نظيفة وموثوقة.
نصيحة من أخ لمطور واعد
بص يا صديقي، أدوات زي React Hook Form هي اللي بتفرق بين المطور اللي بيشتغل "أيوة شغالة" والمطور اللي بيبني تطبيقات قابلة للتوسع (Scalable). نصيحتي ليك: متكتفيش بس بأنك تعرف الكود بيشتغل إزاي، لكن حاول تفهم الـ Architecture ورا الـ Performance Optimization. جرب تبني فورم كبيرة، قارن بين الـ State العادي وبين المكتبة، وشوف الفرق بنفسك في الـ React DevTools. دي أكتر طريقة هتخليك متمكن من أدواتك.
بالتوفيق في رحلتك البرمجية، ولو عندك أي استفسار أنا موجود!