تكوين قطعة المسار (Route Segment Config)
الخيارات الموضحة في هذه الصفحة تكون معطلة إذا كان علم
dynamicIO
مفعلاً، وسيتم إهمالها في المستقبل.
تتيح خيارات قطعة المسار تكوين سلوك الصفحة، أو التخطيط، أو معالج المسار عن طريق تصدير المتغيرات التالية مباشرة:
الخيار | النوع | الافتراضي |
---|---|---|
experimental_ppr | boolean | |
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | boolean | true |
revalidate | false | 0 | number | false |
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' |
maxDuration | number | يتم تعيينه بواسطة منصة النشر |
الخيارات
experimental_ppr
تمكين التصيير الجزئي المسبق (PPR) للتخطيط أو الصفحة.
export const experimental_ppr = true
// true | false
export const experimental_ppr = true
// true | false
dynamic
تغيير السلوك الديناميكي للتخطيط أو الصفحة ليصبح ثابتًا بالكامل أو ديناميكيًا بالكامل.
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
ملاحظة جيدة: النموذج الجديد في دليل
app
يفضل التحكم الدقيق في التخزين المؤقت على مستوى طلبfetch
بدلاً من النموذج الثنائي الكل أو لا شيء لـgetServerSideProps
وgetStaticProps
على مستوى الصفحة في دليلpages
. خيارdynamic
هو طريقة للعودة إلى النموذج السابق كتسهيل ويوفر مسار هجرة أبسط.
'auto'
(الافتراضي): الخيار الافتراضي لتخزين أكبر قدر ممكن دون منع أي مكونات من اختيار السلوك الديناميكي.'force-dynamic'
: فرض التصيير الديناميكي، مما يؤدي إلى تصيير المسارات لكل مستخدم عند وقت الطلب. هذا الخيار يعادل:- تعيين خيار كل طلب
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()
على إرجاع قيم فارغة. من الممكن استخدامrevalidate
، أوrevalidatePath
، أوrevalidateTag
في الصفحات أو التخطيطات المصممة بـforce-static
.
ملاحظة جيدة:
- يمكن العثور على تعليمات كيفية الهجرة من
getServerSideProps
وgetStaticProps
إلىdynamic: 'force-dynamic'
وdynamic: 'error'
في دليل الترقية.
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
.- لتصيير جميع المسارات ثابتًا في المرة الأولى التي يتم زيارتها فيها، ستحتاج إلى إرجاع مصفوفة فارغة في
generateStaticParams
أو استخدامexport const dynamic = 'force-static'
.- عندما يكون
dynamicParams = true
، تستخدم القطعة تصيير الخادم المتدفق (Streaming Server Rendering).
revalidate
تعيين وقت إعادة التحقق الافتراضي للتخطيط أو الصفحة. لا يتجاوز هذا الخيار قيمة revalidate
المعينة بواسطة طلبات fetch
الفردية.
export const revalidate = false
// false | 0 | number
export const revalidate = false
// false | 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 = 600
صالحة، ولكنrevalidate = 60 * 10
ليست صالحة.- قيمة إعادة التحقق غير متاحة عند استخدام
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
نوصي باستخدام وقت تشغيل Node.js لتصيير تطبيقك، ووقت تشغيل Edge للبرمجيات الوسيطة (Middleware).
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'nodejs'
(الافتراضي)'edge'
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
يعتمد دعم preferredRegion
والمناطق المدعومة على منصة النشر الخاصة بك.
ملاحظة جيدة:
- إذا لم يتم تحديد
preferredRegion
، فسوف يرث الخيار من أقرب تخطيط أب.- التخطيط الجذري افتراضيًا لجميع المناطق.
maxDuration
بشكل افتراضي، لا يحد Next.js من تنفيذ المنطق من جانب الخادم (تصيير صفحة أو معالجة API).
يمكن لمنصات النشر استخدام maxDuration
من إخراج بناء Next.js لإضافة حدود تنفيذ محددة.
ملاحظة: يتطلب هذا الإعداد Next.js 13.4.10
أو أعلى.
export const maxDuration = 5
export const maxDuration = 5
ملاحظة جيدة:
- إذا كنت تستخدم إجراءات الخادم (Server Actions)، فاضبط
maxDuration
على مستوى الصفحة لتغيير المهلة الافتراضية لجميع إجراءات الخادم المستخدمة في الصفحة.
generateStaticParams
يمكن استخدام الدالة generateStaticParams
بالاشتراك مع قطع المسار الديناميكية لتحديد قائمة معلمات قطعة المسار التي سيتم إنشاؤها ثابتًا في وقت البناء بدلاً من عند الطلب في وقت الطلب.
راجع مرجع API لمزيد من التفاصيل.
سجل الإصدارات
الإصدار | |
---|---|
v15.0.0-RC | تم إهمال export const runtime = "experimental-edge" . يتوفر أداة تحويل الشفرات (codemod). |