انتظار معلمات المسار (Route Params)
جزء من قسم أساسيات Next.js في رحلة React على Coddy — الدرس 24 من 47.
يسلّم المسار الديناميكي (dynamic route) الجزء الخاص بـ URL إلى صفحتك عبر params. في Next 15 هناك الملاحظة التالية التي تستحق الحفظ:
params هو Promise.
// app/menu/[slug]/page.jsx
export default async function DishPage({ params }) {
const { slug } = await params;
// /menu/carbonara -> slug === 'carbonara'
}نسيان await لن يتسبب في انهيار أي شيء، وهو ما يجعله أمرًا مخادعًا تحديدًا. تفكيك الـ promise يمنحك فقط undefined:
const { slug } = params; // undefined
const dish = await getDish(slug); // يبحث عن لا شيءلا تزال الصفحة تُعرض. لكنها فارغة تمامًا، أو مليئة ببدائل الطوارئ (fallbacks)، وتبدأ في البحث عبر طبقة البيانات لديك عن خطأ لم يكن موجودًا من الأساس.
تنطبق القاعدة نفسها على searchParams. كلاهما عبارة عن promises، وكلاهما يتطلب استخدام await، وكلاهما متاح فقط لمكونات الخادم من النوع async، وهو سبب آخر وجوب كون الصفحة التي كتبتها للتو من نوع async.
لماذا نستخدم الـ promises على الإطلاق؟ لكي يتمكن Next.js من البدء في عرض أجزاء صفحتك التي لا تعتمد على عنوان URL قبل أن ينتهي من معالجة الأجزاء التي تعتمد عليه.
التحدي
سهلملف app/menu/[slug]/page.jsx صحيح تقريبًا، ولكنه لا يقوم بعقل await لـ params أبداً، لذلك تعود كل وجبة كـ Unknown dish.
- استخدم
awaitمعparamsقبل التفكيك (destructuring):const { slug } = await params;
الملف lib/data.js والصفحة الرئيسية مقفلان. يجب أن تعرض زيارة /menu/carbonara الاسم Carbonara في #dish-name وسعرها في #dish-price.
جرّب بنفسك
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات Next.js
4الخادم والعميل (Server & Client)
نوعان من المكوناتقراءة الخطأسطر 'use client'الحفاظ على أجزاء العميل صغيرةخادم داخل عميلملخص: الخادم والعميل2التوجيه والروابط
المجلدات هي مسارات التوجيهالمسارات المتداخلةربط الصفحاتالمسارات الديناميكيةصفحات غير موجودةملخص: التوجيه5البيانات على الخادم
المكونات غير المتزامنة (Async Components)انتظار معلمات المسار (Route Params)جلب البيانات مرتين في وقت واحدحالات التحميلالتعامل مع الأخطاءملخص: جلب البيانات3التخطيطات والبيانات الوصفية
التخطيط الرئيسيالتنقل المشتركالتخطيطات المتداخلةالبيانات الوصفية للصفحةالبيانات الوصفية الديناميكيةملخص: التخطيطات6إجراءات الخادم (Server Actions)
ما هو إجراء الخادم (Server Action)؟نماذج تعمل وتتفاعلقراءة بيانات النموذجتحديث الصفحةملخص: إجراءات الخادم