البيانات الوصفية الديناميكية
جزء من قسم أساسيات Next.js في رحلة React على Coddy — الدرس 15 من 47.
كائن الـ metadata هو قيمة ثابتة (constant)، لذا لا يمكنه المساعدة في المسار الديناميكي: app/dishes/[slug]/page.jsx يقدم طبقاً مختلفاً عند كل عنوان URL، وكل واحد منها يحتاج إلى title خاص به.
لذلك، قم بتصدير function بدلاً من ذلك:
export async function generateMetadata({ params }) {
const { slug } = await params;
return { title: DISHES[slug].name };
}يحصل على نفس الـ params التي تحصل عليها الصفحة (عبارة عن promise، لذا تقوم بعمل await له) ويرجع نفس الشكل الذي يملكه كائن metadata. استخدم أحدهما أو الآخر، ولا تستخدم كلاهما أبداً في نفس الملف.
قوالب العنوان (Title templates)
تكرار اسم الموقع في عنوان كل صفحة يصبح أمرًا مملًا. يمكن لملف الـ layout أن يمرر نمطًا محددًا بدلاً من نص عادي:
// app/layout.jsx
export const metadata = {
title: {
default: 'Coddy Eats',
template: '%s | Coddy Eats',
},
};default: العنوان المخصص للصفحات التي لا تحدد أي عنوانtemplate: النمط المخصص للصفحات التي تحدد عنوانًا؛ حيث يوضع عنوانها مكان%s
لذا فإن الصفحة التي تُرجع title: 'Margherita' تظهر كـ Margherita | Coddy Eats في علامة التبويب، بينما الصفحة الرئيسية، التي لا تحدد أي شيء، تبقى Coddy Eats. اكتب العلامة التجارية مرة واحدة، في الـ layout.
التحدي
متوسطتعرض كل صفحة طبق حالياً Coddy Eats في علامة التبويب (tab). أعطِ كل واحدة منها عنواناً خاصاً بها.
في app/dishes/[slug]/page.jsx، أضف دالة async مُصدَّرة (exported) باسم generateMetadata تقوم بـ:
- تأخذ
{ params }وتنتظرها استخدامawaitللحصول علىslug - ترجع
{ title: DISHES[slug].name }
تحتوي app/layout.jsx بالفعل على القالب '%s | Coddy Eats'، لذا فإن /dishes/margherita ينبغي أن تنتهي بالعنوان Margherita | Coddy Eats. ألقِ نظرة على التخطيط (layout): لست بحاجة إلى تغييره.
جرّب بنفسك
import './globals.css';
export const metadata = {
title: {
default: 'Coddy Eats',
template: '%s | Coddy Eats',
},
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات Next.js
4الخادم والعميل (Server & Client)
نوعان من المكوناتقراءة الخطأسطر 'use client'الحفاظ على أجزاء العميل صغيرةخادم داخل عميلملخص: الخادم والعميل2التوجيه والروابط
المجلدات هي مسارات التوجيهالمسارات المتداخلةربط الصفحاتالمسارات الديناميكيةصفحات غير موجودةملخص: التوجيه3التخطيطات والبيانات الوصفية
التخطيط الرئيسيالتنقل المشتركالتخطيطات المتداخلةالبيانات الوصفية للصفحةالبيانات الوصفية الديناميكيةملخص: التخطيطات6إجراءات الخادم (Server Actions)
ما هو إجراء الخادم (Server Action)؟نماذج تعمل وتتفاعلقراءة بيانات النموذجتحديث الصفحةملخص: إجراءات الخادم