useActionState وuseFormStatus
استخدم useActionState لتتبّع حالة الانتظار والأخطاء، واستخدم useFormStatus لتعطيل أزرار الإرسال أثناء التنفيذ
useActionState وuseFormStatus درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
مقدمة إلى useActionState
إن useActionState(action, initialState) هو خطاف في React 19 يغلّف إجراءً من إجراءات الخادم لتتبّع حالته بين عمليات الإرسال. ويتلقى دالة الإجراء وقيمة حالة أولية، ثم يعيد صفيفًا ثلاثيًا يمكنكم استخدامه للتحكم في تجربة النموذج بأكملها.
الصفيف الثلاثي المعاد
يعيد الخطاف [state, formAction, isPending]. وتحتوي state على أحدث قيمة أعادها الإجراء، وتبدأ بقيمة null أو بالقيمة الأولية التي حددتموها. أما formAction فهو الإجراء المغلّف الذي تمررونه إلى النموذج. وتكون isPending مساوية لـ true أثناء تنفيذ الإجراء على الخادم.
تتبّع الحالة بين عمليات الإرسال
في كل مرة يُرسل فيها النموذج، يعمل إجراء الخادم وتصبح قيمته المعادة هي state الجديدة. وفي العرض الأول، تساوي state قيمة initialState. ويسهّل ذلك عرض واجهة مستخدم مختلفة وفقًا لما إذا كانت هناك عمليات إرسال سابقة وما إذا كانت قد أعادت نتائج.
عرض أخطاء التحقق داخل النموذج
إذا أعاد إجراء الخادم القيمة { errors: { email: 'Invalid email' } }، فيمكنكم عرض الخطأ داخل النموذج: {state.errors?.email && <p>{state.errors.email}</p>}. وبما أن الحالة تستمر بين عمليات إعادة العرض، تظل رسالة الخطأ ظاهرة حتى تستبدلها عملية إرسال ناجحة تالية بالحالة الجديدة.
عرض رسائل النجاح
عندما يعيد الإجراء { success: true }، يمكن للمكوّن عرض رسالة نجاح: {state?.success && <p>Form submitted!</p>}. ويمكن إخفاء النموذج أو استبداله برسالة النجاح بشكل مشروط استنادًا إلى قيمة الحالة.
مقدمة إلى useFormStatus
إن useFormStatus() هو خطاف يقرأ حالة الانتظار لعنصر <form> الأقرب إليه في شجرة المكوّنات. ويعيد كائنًا يتضمن { pending: boolean }. ويجب استخدام هذا الخطاف داخل مكوّن يكون ابنًا للنموذج، وليس داخل المكوّن الذي يعرض النموذج نفسه.
سبب وجود قيد الموضع
يوجد شرط استخدام useFormStatus داخل النموذج لأن الخطاف يقرأ سياق النموذج من شجرة React الموجودة فوقه. وإذا استُدعي في المكوّن نفسه الذي يعرض النموذج، فسيكون شقيقًا للنموذج لا نسلًا له، ولن يتمكن من الوصول إلى حالة النموذج.
إنشاء مكوّن لزر الإرسال
يتمثل النمط القياسي في استخراج زر الإرسال إلى مكوّن مستقل: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. ثم يوضع هذا المكوّن داخل النموذج، مما يمنحه إمكانية الوصول إلى حالة انتظار النموذج.
تعطيل زر الإرسال
يمنع ضبط disabled={pending} في زر الإرسال عمليات الإرسال المزدوجة. فعندما ينقر المستخدم على زر الإرسال ويكون إجراء الخادم قيد التنفيذ، تكون قيمة pending هي true، فيُعطَّل الزر ولا يعود قابلًا للنقر. وعند اكتمال الإجراء، تعود قيمة pending إلى false ويُعاد تفعيل الزر.
دمج الخطافين
يجمع نمط تجربة النموذج الكامل بين الخطافين: إذ يتتبّع useActionState في مكوّن النموذج نتيجة الإجراء ويوفر formAction، بينما يتتبّع useFormStatus داخل مكوّن ابن يُسمى SubmitButton حالة الانتظار. ويوفر الخطافان معًا عرض أخطاء التحقق وزر إرسال سريع الاستجابة.
واجهة المستخدم التفاؤلية باستخدام useOptimistic
للحصول على استجابة أسرع، يتكامل useOptimistic مع useActionState. إذ تحدّثون واجهة المستخدم فورًا بالنتيجة المتوقعة قبل استجابة الخادم، ثم تزامنونها عند وصول الاستجابة الفعلية. ويشيع هذا النمط في أزرار الإعجاب وقوائم المهام والتفاعلات الأخرى التي تتطلب استجابة سريعة.
موضع useFormStatus
أين يجب استدعاء useFormStatus حتى يعمل بشكل صحيح؟
مراجعة الدرس
يعيد useActionState(action, initialState) القيمة [state, formAction, isPending] لتتبّع نتائج إجراءات الخادم. وتحتوي الحالة على القيمة التي أعادها الإجراء، مما يتيح عرض الأخطاء والنجاح داخل النموذج. ويوفر useFormStatus() القيمة { pending } داخل المكوّنات الابنة للنموذج، مما يتيح إنشاء أزرار إرسال سريعة الاستجابة. وينشئ الخطافان معًا تجربة نموذج كاملة وسهلة الوصول.
الأسئلة الشائعة
هل درس «useActionState وuseFormStatus» مجاني؟
نعم — نص درس «useActionState وuseFormStatus» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «useActionState وuseFormStatus»؟
استخدم useActionState لتتبّع حالة الانتظار والأخطاء، واستخدم useFormStatus لتعطيل أزرار الإرسال أثناء التنفيذ تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «useActionState وuseFormStatus»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إجراءات الخادم في React 19 وNext.js
- إجراءات النماذج: استبدال مسارات API بعمليات التعديل
- useActionState وuseFormStatus
- التحسين التدريجي باستخدام Server Actions