React Academy · درس

إجراءات React وuseActionState

عرّف إجراءات الخادم والعميل، وعالج عمليات إرسال النماذج، وتتبع حالات الانتظار.

الدرس 3 من 413 خطوة

إجراءات React وuseActionState درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

مرحبًا

في هذا الدرس، ستعرّفون React 19 Actions، وستستخدمون useActionState لإدارة حالة إرسال النموذج، وستتعاملون مع حالتي الانتظار والخطأ بطريقة واضحة.

ما هي React Actions؟

الإجراءات هي دوال غير متزامنة تمرّرونها إلى الخاصية `action` في النموذج (أو إلى `formAction` في الزر). تتعامل React 19 معها بطريقة خاصة؛ إذ تتتبّع حالة الانتظار، وتعالج الأخطاء، وتتكامل تلقائيًا مع Transitions.

إجراءات الخادم في Next.js

في Next.js باستخدام App Router، أضيفوا 'use server' في أعلى الدالة لتحويلها إلى Server Action. تستدعيها React على الخادم عند إرسال النموذج، ولا حاجة إلى مسار API.
'use server';

export async function createPost(formData) {
  const title = formData.get('title');
  await db.insert(posts).values({ title });
  revalidatePath('/posts');
}

استخدام إجراء مع نموذج

مرّروا إجراء الخادم أو العميل مباشرةً إلى الخاصية `action` في النموذج. تستدعيه React مع FormData عند إرسال النموذج.
import { createPost } from './actions';

export default function NewPostForm() {
  return (
    <form action={createPost}>
      <input name="title" />
      <button type="submit">Create</button>
    </form>
  );
}

useActionState

تغلّف useActionState إجراءً لتمنحكم الحالة الحالية (نتيجة آخر إجراء) وقيمة منطقية تشير إلى الانتظار. وتُمرَّر الدالة المغلّفة إلى form action.
'use client';
import { useActionState } from 'react';
import { createPost } from './actions';

function NewPostForm() {
  const [state, action, isPending] = useActionState(createPost, null);
  return (
    <form action={action}>
      {state?.error && <p>{state.error}</p>}
      <input name="title" />
      <button disabled={isPending}>Create</button>
    </form>
  );
}

إجراء يُعيد الحالة

يتلقى إجراء الخادم `(prevState, formData)` عند استخدامه مع useActionState. أعيدوا كائنًا يحتوي على معلومات النجاح أو الخطأ، إذ تصبح هذه هي الحالة الجديدة.
'use server';

export async function createPost(prevState, formData) {
  const title = formData.get('title')?.toString();
  if (!title) return { error: 'Title is required' };
  await db.insert(posts).values({ title });
  return { success: true };
}

isPending لتعطيل الإرسال

استخدموا قيمة isPending من useActionState لتعطيل زر الإرسال وعرض مؤشر تحميل أثناء تنفيذ الإجراء.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

إجراءات العميل

ليس من الضروري أن تكون الإجراءات على الخادم. إجراء العميل هو دالة عادية غير متزامنة من دون 'use server'. ومع ذلك، يظل يحصل على إدارة الانتظار والحالة من useActionState.
async function clientAction(prevState, formData) {
  const res = await fetch('/api/post', {
    method: 'POST', body: formData,
  });
  if (!res.ok) return { error: 'Failed' };
  return { success: true };
}

useFormStatus للمكوّنات الفرعية

في زر إرسال متداخل بعمق، استخدموا `useFormStatus()` لقراءة حالة الانتظار للنموذج الأب من دون تمرير الخصائص عبر مكوّنات وسيطة.
'use client';
import { useFormStatus } from 'react-dom';

function SubmitButton() {
  const { pending } = useFormStatus();
  return <button disabled={pending}>Submit</button>;
}

التحسين التدريجي

تعمل React Actions مع Server Actions حتى من دون JavaScript (التحسين التدريجي). يرسل المتصفح طلب POST أصليًا للنموذج إلى معالج Next.js، ما يجعل الميزة تعمل قبل تحميل JavaScript.

تحقّق سريع

ما الذي تُعيده useActionState ويسمح لكم بعرض حالة تحميل أثناء تنفيذ إجراء النموذج؟

مراجعة

React Actions هي دوال غير متزامنة تُمرَّر إلى action في النموذج. تغلّف useActionState إجراءً لتمنحكم الحالة، ودالة الإجراء المغلّفة، وisPending. تُضاف 'use server' إلى Server Actions، وتُنفَّذ على الخادم.

التالي

الدرس التالي: **useOptimistic للتغذية الراجعة الفورية** — ستعرضون تحديثات واجهة متفائلة أثناء تنفيذ تغيير على الخادم.
البدء مجانًا

تعلم React مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
88
الدروس
324

الأسئلة الشائعة

هل درس «إجراءات React وuseActionState» مجاني؟

نعم — نص درس «إجراءات React وuseActionState» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «إجراءات React وuseActionState»؟

عرّف إجراءات الخادم والعميل، وعالج عمليات إرسال النماذج، وتتبع حالات الانتظار. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «إجراءات React وuseActionState»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. شرح مكوّنات React على الخادم
  2. ‏use() للموارد غير المتزامنة
  3. إجراءات React وuseActionState
  4. ‏useOptimistic للاستجابة الفورية
← العودة إلى React Academy