0Pricing
React Academy · درس

المسارات الديناميكية ومجموعات المسارات

أنشئ مقاطع ديناميكية [slug] ومجموعات مسارات باستخدام (folder) ومسارات متوازية.

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

المقاطع الديناميكية

أحط اسم مجلد بأقواس مربعة لإنشاء مقطع ديناميكي. وتصبح القيمة متاحة في params التي تُمرر إلى الصفحة.

// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
  return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'

المعلمات ذات الأنواع

تكون المعلمات دائمًا سلاسل نصية في عنوان URL. حلّلها صراحةً عند استخدامها لمعرّفات رقمية.

export default async function PostPage({ params }: { params: { slug: string } }) {
  const post = await getPostBySlug(params.slug);
  if (!post) notFound();
  return <article>{post.content}</article>;
}

المقاطع الجامعة

استخدم [...slug] لمطابقة أي عدد من مقاطع المسار. وتكون القيمة مصفوفة من السلاسل النصية.

// app/docs/[...path]/page.tsx
export default function DocsPage({ params }: { params: { path: string[] } }) {
  // /docs/react/hooks → params.path = ['react', 'hooks']
  return <DocViewer path={params.path} />;
}

المقطع الجامع الاختياري

يطابق [[...slug]] مقطع الجذر أيضًا، وهو مفيد لبادئات المسار الاختيارية.

// app/[[...lang]]/page.tsx
// Matches /, /en, /en/about, /fr/products/123
export default function Page({ params }: { params: { lang?: string[] } }) {
  const lang = params.lang?.[0] ?? 'en';
  return <div lang={lang}>...</div>;
}

generateStaticParams

صدّر generateStaticParams() لإعادة عرض المسارات الديناميكية مسبقًا أثناء البناء، وإنشاء HTML ثابت لكل مجموعة من قيم المعلمات.

export async function generateStaticParams() {
  const posts = await getPosts();
  return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. statically

مجموعات المسارات — (folder)

أحط اسم مجلد بأقواس مستديرة لإنشاء مجموعة مسارات. فهي تنظّم الملفات دون إضافة مقطع إلى عنوان URL.

// File structure:
// app/(marketing)/about/page.tsx → /about
// app/(marketing)/blog/page.tsx  → /blog
// app/(app)/dashboard/page.tsx   → /dashboard
// (marketing) and (app) don't appear in URLs

مجموعات المسارات مع التخطيطات المشتركة

يمكن أن تحتوي كل مجموعة مسارات على ملف layout.tsx خاص بها، ما يتيح تخطيطات مختلفة لأقسام مختلفة دون تداخل عناوين URL.

// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the root

المسارات المتوازية — @slot

ضع @ في بداية اسم مجلد لإنشاء فتحة. وتُعرض الفتحات في التخطيط الأب في الوقت نفسه، ما يجعلها مفيدة للنوافذ المنبثقة أو العرض المنقسم أو علامات التبويب.

// app/@modal/login/page.tsx
// app/layout.tsx
export default function RootLayout({ children, modal }) {
  return (
    <div>
      {children}
      {modal} {/* renders @modal/login/page.tsx side by side */}
    </div>
  );
}

المسارات المعترضة — (..)

استخدم الصيغة (..) لاعتراض مسار وعرضه داخل السياق نفسه، مثل فتح صورة في نافذة منبثقة بدلًا من الانتقال إلى صفحة جديدة.

// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsx

البيانات الوصفية للمسارات الديناميكية

صدّر دالة غير متزامنة باسم generateMetadata في المسارات الديناميكية لتعيين وسوم تحسين محركات البحث لكل صفحة استنادًا إلى معلمات المسار.

export async function generateMetadata({ params }: { params: { id: string } }) {
  const product = await getProduct(params.id);
  return { title: product.name, description: product.description };
}

تحقق سريع

ماذا يحدث عند إحاطة اسم مجلد بأقواس مستديرة في App Router ضمن Next.js؟

مراجعة

ينشئ [id] مقاطع ديناميكية، ويجمع [...slug] جميع المسارات الفرعية، ويجعلها [[...slug]] اختيارية. تنظّم مجموعات المسارات باستخدام (name) الشيفرة دون التأثير في عنوان URL، كما تتيح تخطيطات خاصة بكل مجموعة. استخدم generateStaticParams لإعادة العرض مسبقًا أثناء البناء.

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

هل درس «المسارات الديناميكية ومجموعات المسارات» مجاني؟

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

ماذا ستتعلم في «المسارات الديناميكية ومجموعات المسارات»؟

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

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

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

كم من الوقت يستغرق درس «المسارات الديناميكية ومجموعات المسارات»؟

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

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

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

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

  1. اصطلاحات ملفات App Router
  2. مكوّنات الخادم مقابل مكوّنات العميل في Next.js
  3. المسارات الديناميكية ومجموعات المسارات
  4. واجهة Metadata API وتحسين محركات البحث في App Router
← العودة إلى React Academy