0Pricing
React Academy · درس

أدوات التحميل والإجراءات (واجهة Data Router)

اجلب بيانات المسار قبل التصيير باستخدام أدوات التحميل وعالج إرسال النماذج باستخدام الإجراءات.

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

ما هي دوال loader؟

في Data Router في React Router v6.4 والإصدارات الأحدث، تكون loader دالة غير متزامنة مرتبطة بمسار، وتجلب البيانات قبل عرض المسار، بدلًا من نمط الجلب باستخدام useEffect.

تعريف loader

أضف الخاصية loader إلى كائن المسار. وتستقبل { params, request } وتُعيد بيانات أو كائن Response.

import { createBrowserRouter } from 'react-router-dom';

async function userLoader({ params }) {
  const res = await fetch(`/api/users/${params.id}`);
  if (!res.ok) throw new Response('Not Found', { status: 404 });
  return res.json();
}

const router = createBrowserRouter([
  { path: '/users/:id', element: <UserDetail />, loader: userLoader },
]);

قراءة بيانات loader باستخدام useLoaderData

تُعيد useLoaderData() القيمة التي أعادتها loader. ولا يُعرض المكوّن إلا بعد اكتمال loader.

import { useLoaderData } from 'react-router-dom';

function UserDetail() {
  const user = useLoaderData();
  return <h1>{user.name}</h1>;
}

ما هي دوال action؟

تكون action دالة غير متزامنة تتولى تعديلات البيانات، مثل إرسال النماذج والحذف. وتعمل قبل إعادة عرض المسار بعد إجراء POST للنموذج.

async function createUserAction({ request }) {
  const formData = await request.formData();
  const name = formData.get('name');
  await fetch('/api/users', {
    method: 'POST',
    body: JSON.stringify({ name }),
    headers: { 'Content-Type': 'application/json' },
  });
  return redirect('/users');
}

استخدام Form لتشغيل action

استبدل <form> بـ <Form> الخاص بـ React Router. عند الإرسال، تُسلسل الحقول في صورة FormData وتستدعي action الخاصة بالمسار.

import { Form } from 'react-router-dom';

function NewUser() {
  return (
    <Form method="post">
      <input name="name" />
      <button type="submit">Create</button>
    </Form>
  );
}

إعادة البيانات من action

يمكن لـ action إعادة بيانات، وليس إعادة توجيه فقط. اقرأها في المكوّن باستخدام useActionData()، وهو أمر مفيد لإعادة أخطاء التحقق.

async function loginAction({ request }) {
  const data = await request.formData();
  const errors = validate(data);
  if (errors) return errors; // returned to useActionData
  await login(data);
  return redirect('/dashboard');
}

function Login() {
  const errors = useActionData();
  return (
    <Form method="post">
      {errors?.email && <p>{errors.email}</p>}
      <input name="email" />
    </Form>
  );
}

حالات التحميل باستخدام useNavigation

تُخبرك useNavigation() بوجود loader أو action قيد التنفيذ، حتى تتمكن من عرض مؤشرات التحميل أو تعطيل أزرار الإرسال.

function SubmitButton() {
  const navigation = useNavigation();
  const isSubmitting = navigation.state === 'submitting';
  return (
    <button type="submit" disabled={isSubmitting}>
      {isSubmitting ? 'Saving...' : 'Save'}
    </button>
  );
}

البيانات المؤجلة باستخدام defer()

استخدم defer() لإعادة وعود البيانات البطيئة من loader من دون حجب العرض، ثم فكّها باستخدام <Await> وSuspense.

import { defer, Await } from 'react-router-dom';

async function slowLoader() {
  return defer({ fast: await getFast(), slow: getSlow() });
}

function Page() {
  const { fast, slow } = useLoaderData();
  return (
    <>
      <h1>{fast.title}</h1>
      <Suspense fallback={<p>Loading...</p>}>
        <Await resolve={slow}>{data => <Chart data={data} />}</Await>
      </Suspense>
    </>
  );
}

إعادة التحقق بعد تنفيذ action

بعد اكتمال action، يعيد React Router تشغيل جميع أدوات loader النشطة تلقائيًا لتحديث البيانات، من دون الحاجة إلى إعادة جلب يدوية.

معالجة الأخطاء في loader

ارمِ كائن Response أو أي خطأ من loader؛ إذ يلتقطه React Router ويعرض errorElement الخاص بالمسار، ويمكن الوصول إليه عبر useRouteError().

function ErrorPage() {
  const error = useRouteError();
  return (
    <div>
      <h1>{error.status} {error.statusText}</h1>
    </div>
  );
}

Fetchers للتعديلات غير المرتبطة بالتنقل

تتيح لك useFetcher() استدعاء loaders أو actions من دون التنقل. وهي مفيدة للنماذج المضمّنة، مثل الإعجاب بمنشور دون مغادرة الصفحة.

function LikeButton({ postId }) {
  const fetcher = useFetcher();
  return (
    <fetcher.Form method="post" action={`/posts/${postId}/like`}>
      <button type="submit">Like</button>
    </fetcher.Form>
  );
}

تحقق سريع

ما hook الذي يقرأ البيانات التي تُعيدها دالة loader الخاصة بالمسار؟

مراجعة

تستخدم واجهة Data API في React Router أدوات loader لجلب البيانات قبل العرض، وaction للتعامل مع التعديلات. وتقرأ المكوّنات بيانات loader عبر useLoaderData()، ونتائج action عبر useActionData()، وحالة التنقل عبر useNavigation().

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

هل درس «أدوات التحميل والإجراءات (واجهة Data Router)» مجاني؟

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

ماذا ستتعلم في «أدوات التحميل والإجراءات (واجهة Data Router)»؟

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

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

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

كم من الوقت يستغرق درس «أدوات التحميل والإجراءات (واجهة Data Router)»؟

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

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

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

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

  1. المسارات المتداخلة وتخطيطات Outlet
  2. أدوات التحميل والإجراءات (واجهة Data Router)
  3. المسارات المحمية وحواجز المصادقة
  4. إدارة الحالة في معاملات البحث ضمن URL
← العودة إلى React Academy