تكوين جزء المسار (Route Segment Config)

تتيح لك خيارات جزء المسار تكوين سلوك الصفحة أو التخطيط أو معالج المسار من خلال تصدير المتغيرات التالية مباشرة:

الخيارالنوعالافتراضي
dynamic'auto' | 'force-dynamic' | 'error' | 'force-static''auto'
dynamicParamsbooleantrue
revalidatefalse | 'force-cache' | 0 | numberfalse
fetchCache'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store''auto'
runtime'nodejs' | 'edge''nodejs'
preferredRegion'auto' | 'global' | 'home' | string | string[]'auto'
maxDurationnumberيتم تعيينه بواسطة منصة النشر
export const dynamic = 'auto'
export const dynamicParams = true
export const revalidate = false
export const fetchCache = 'auto'
export const runtime = 'nodejs'
export const preferredRegion = 'auto'
export const maxDuration = 5

export default function MyComponent() {}
export const dynamic = 'auto'
export const dynamicParams = true
export const revalidate = false
export const fetchCache = 'auto'
export const runtime = 'nodejs'
export const preferredRegion = 'auto'
export const maxDuration = 5

export default function MyComponent() {}

معلومة مفيدة:

  • يجب أن تكون قيم خيارات التكوين قابلة للتحليل الثابت حاليًا. على سبيل المثال revalidate = 600 صالحة، لكن revalidate = 60 * 10 غير صالحة.

الخيارات

dynamic

تغيير السلوك الديناميكي للتخطيط أو الصفحة ليصبح ثابتًا بالكامل أو ديناميكيًا بالكامل.

export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'

معلومة مفيدة: يفضل النموذج الجديد في دليل app التحكم الدقيق في التخزين المؤقت على مستوى طلب fetch بدلاً من النموذج الثنائي الكلي في دليل pages باستخدام getServerSideProps و getStaticProps على مستوى الصفحة. خيار dynamic هو طريقة للعودة إلى النموذج السابق كتسهيل ويوفر مسار هجرة أبسط.

  • 'auto' (الافتراضي): الخيار الافتراضي لتخزين أكبر قدر ممكن دون منع أي مكونات من اختيار السلوك الديناميكي.
  • 'force-dynamic': فرض التصيير الديناميكي وجلب البيانات غير المخزنة للتخطيط أو الصفحة عن طريق تعطيل جميع التخزين المؤقت لطلبات fetch وإعادة التحقق دائمًا. يعادل هذا الخيار:
    • getServerSideProps() في دليل pages.
    • تعيين خيار كل طلب fetch() في التخطيط أو الصفحة إلى { cache: 'no-store', next: { revalidate: 0 } }.
    • تعيين تكوين الجزء إلى export const fetchCache = 'force-no-store'
  • 'error': فرض التصيير الثابت وتخزين بيانات التخطيط أو الصفحة عن طريق التسبب في خطأ إذا استخدمت أي مكونات وظائف ديناميكية أو جلب بيانات غير مخزنة. يعادل هذا الخيار:
    • getStaticProps() في دليل pages.
    • تعيين خيار كل طلب fetch() في التخطيط أو الصفحة إلى { cache: 'force-cache' }.
    • تعيين تكوين الجزء إلى fetchCache = 'only-cache', dynamicParams = false.
    • dynamic = 'error' يغير الافتراضي لـ dynamicParams من true إلى false. يمكنك العودة إلى تصيير الصفحات ديناميكيًا للمعاملات الديناميكية غير المولدة بواسطة generateStaticParams عن طريق تعيين dynamicParams = true يدويًا.
  • 'force-static': فرض التصيير الثابت وتخزين بيانات التخطيط أو الصفحة عن طريق إجبار cookies() و headers() و useSearchParams() على إرجاع قيم فارغة.

معلومة مفيدة:

dynamicParams

التحكم في ما يحدث عند زيارة جزء ديناميكي لم يتم توليده باستخدام generateStaticParams.

export const dynamicParams = true // true | false,
export const dynamicParams = true // true | false,
  • true (الافتراضي): يتم توليد الأجزاء الديناميكية غير المضمنة في `generateStaticParams عند الطلب.
  • false: سترجع الأجزاء الديناميكية غير المضمنة في generateStaticParams خطأ 404.

معلومة مفيدة:

  • يحل هذا الخيار محل خيار fallback: true | false | blocking لـ getStaticPaths في دليل pages.
  • عندما يكون dynamicParams = true، يستخدم الجزء تصيير الخادم المتدفق (Streaming Server Rendering).
  • إذا تم استخدام dynamic = 'error' و dynamic = 'force-static'، فسيغير الافتراضي لـ dynamicParams إلى false.

revalidate

تعيين وقت إعادة التحقق الافتراضي للتخطيط أو الصفحة. لا يتجاوز هذا الخيار قيمة revalidate المعينة بواسطة طلبات fetch الفردية.

export const revalidate = false
// false | 'force-cache' | 0 | number
export const revalidate = false
// false | 'force-cache' | 0 | number
  • false: (الافتراضي) الإرشاد الافتراضي لتخزين أي طلبات fetch التي تعين خيار cache إلى 'force-cache' أو التي يتم اكتشافها قبل استخدام وظيفة ديناميكية. يعادل دلاليًا revalidate: Infinity مما يعني بشكل فعال أنه يجب تخزين المورد إلى أجل غير مسمى. لا يزال بإمكان طلبات fetch الفردية استخدام cache: 'no-store' أو revalidate: 0 لتجنب التخزين وجعل المسار معروضًا ديناميكيًا. أو تعيين revalidate إلى رقم موجب أقل من الافتراضي للمسار لزيادة تكرار إعادة التحقق للمسار.
  • 0: التأكد من أن التخطيط أو الصفحة يتم تصييره ديناميكيًا دائمًا حتى إذا لم يتم اكتشاف أي وظائف ديناميكية أو جلب بيانات غير مخزنة. يغير هذا الخيار الافتراضي لطلبات fetch التي لا تعين خيار cache إلى 'no-store' لكنه يترك طلبات fetch التي تختار 'force-cache' أو تستخدم revalidate موجبًا كما هي.
  • number: (بالثواني) تعيين تكرار إعادة التحقق الافتراضي للتخطيط أو الصفحة إلى n ثانية.

معلومة مفيدة: خيار revalidate متاح فقط عند استخدام وقت تشغيل Node.js. هذا يعني أن استخدام خيار revalidate مع runtime = 'edge' لن يعمل.

تكرار إعادة التحقق

  • سيحدد أقل revalidate عبر كل تخطيط وصفحة لمسار واحد تكرار إعادة التحقق للمسار بالكامل. يضمن هذا إعادة التحقق من الصفحات الفرعية بنفس تكرار تخطيطاتها الأصلية.
  • يمكن لطلبات fetch الفردية تعيين revalidate أقل من revalidate الافتراضي للمسار لزيادة تكرار إعادة التحقق للمسار بالكامل. يتيح لك هذا الاختيار ديناميكيًا تكرار إعادة التحقق الأكثر تكرارًا لمسارات معينة بناءً على بعض المعايير.

fetchCache

هذا خيار متقدم يجب استخدامه فقط إذا كنت بحاجة إلى تجاوز السلوك الافتراضي.

بشكل افتراضي، سيخزن Next.js أي طلبات fetch() يمكن الوصول إليها قبل استخدام أي وظائف ديناميكية ولن يخزن طلبات fetch التي يتم اكتشافها بعد استخدام الوظائف الديناميكية.

يسمح لك fetchCache بتجاوز خيار cache الافتراضي لجميع طلبات fetch في تخطيط أو صفحة.

export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
  • 'auto' (الافتراضي)- الخيار الافتراضي لتخزين طلبات fetch قبل الوظائف الديناميكية مع خيار cache الذي توفره وعدم تخزين طلبات fetch بعد الوظائف الديناميكية.
  • 'default-cache': السماح بأي خيار cache يتم تمريره إلى fetch ولكن إذا لم يتم توفير خيار، فسيتم تعيين خيار cache إلى 'force-cache'. هذا يعني أنه حتى طلبات fetch بعد الوظائف الديناميكية تعتبر ثابتة.
  • 'only-cache': التأكد من أن جميع طلبات fetch تختار التخزين عن طريق تغيير الافتراضي إلى cache: 'force-cache' إذا لم يتم توفير خيار والتسبب في خطأ إذا استخدمت أي طلبات fetch cache: 'no-store'.
  • 'force-cache': التأكد من أن جميع طلبات fetch تختار التخزين عن طريق تعيين خيار cache لجميع طلبات fetch إلى 'force-cache'.
  • 'default-no-store': السماح بأي خيار cache يتم تمريره إلى fetch ولكن إذا لم يتم توفير خيار، فسيتم تعيين خيار cache إلى 'no-store'. هذا يعني أنه حتى طلبات fetch قبل الوظائف الديناميكية تعتبر ديناميكية.
  • 'only-no-store': التأكد من أن جميع طلبات fetch تختار عدم التخزين عن طريق تغيير الافتراضي إلى cache: 'no-store' إذا لم يتم توفير خيار والتسبب في خطأ إذا استخدمت أي طلبات fetch cache: 'force-cache'
  • 'force-no-store': التأكد من أن جميع طلبات fetch تختار عدم التخزين عن طريق تعيين خيار cache لجميع طلبات fetch إلى 'no-store'. يجبر هذا جميع طلبات fetch على إعادة الجلب في كل طلب حتى إذا قدمت خيار 'force-cache'.

سلوك أجزاء المسار المتقاطعة

  • يجب أن تكون أي خيارات معينة عبر كل تخطيط وصفحة لمسار واحد متوافقة مع بعضها البعض.
    • إذا تم توفير كل من 'only-cache' و 'force-cache'، فإن 'force-cache' يفوز. إذا تم توفير كل من 'only-no-store' و 'force-no-store'، فإن 'force-no-store' يفوز. يغير خيار القوة السلوك عبر المسار بحيث يمنع جزء واحد مع 'force-*' أي أخطاء ناتجة عن 'only-*'.
    • الهدف من خيارات 'only-*' و force-*' هو ضمان أن يكون المسار بالكامل إما ثابتًا بالكامل أو ديناميكيًا بالكامل. هذا يعني:
      • لا يُسمح بدمج 'only-cache' و 'only-no-store' في مسار واحد.
      • لا يُسمح بدمج 'force-cache' و 'force-no-store' في مسار واحد.
    • لا يمكن للوالد توفير 'default-no-store' إذا كان الابن يوفر 'auto' أو '*-cache' لأن ذلك قد يجعل نفس طلب fetch له سلوك مختلف.
  • يُوصى عمومًا بترك التخطيطات الأصلية المشتركة كـ 'auto' وتخصيص الخيارات حيث تختلف الأجزاء الفرعية.

runtime

export const runtime = 'nodejs'
// 'edge' | 'nodejs'
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
  • nodejs (الافتراضي)
  • edge

تعرف على المزيد حول وقت تشغيل Edge و Node.js.

preferredRegion

export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']

يعتمد دعم preferredRegion والمناطق المدعومة على منصة النشر الخاصة بك.

معلومة مفيدة:

  • إذا لم يتم تحديد preferredRegion، فسوف يرث خيار أقرب تخطيط أب.
  • التخطيط الجذر يحدد افتراضيًا جميع المناطق.

maxDuration

بناءً على منصة النشر الخاصة بك، قد تتمكن من استخدام وقت تنفيذ افتراضي أعلى لوظيفتك. يسمح لك هذا الإعداد بالاختيار لوقت تنفيذ أعلى ضمن حدود خطتك. ملاحظة: يتطلب هذا الإعداد Next.js 13.4.10 أو أعلى.

export const maxDuration = 5
export const maxDuration = 5

معلومة مفيدة:

  • إذا لم يتم تحديد maxDuration، فإن القيمة الافتراضية تعتمد على منصة النشر وخطتك.

generateStaticParams

يمكن استخدام الدالة generateStaticParams بالاشتراك مع أجزاء المسار الديناميكية لتحديد قائمة معلمات جزء المسار التي سيتم توليدها ثابتًا في وقت البناء بدلاً من عند الطلب في وقت الطلب.

راجع مرجع API لمزيد من التفاصيل.