تكوين مقطع المسار (Route Segment Config)
تتيح لك خيارات مقطع المسار تكوين سلوك الصفحة، أو التخطيط، أو معالج المسار (Route Handler) من خلال تصدير المتغيرات التالية مباشرة:
الخيار | النوع | الافتراضي |
---|---|---|
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 | يتم تعيينه بواسطة منصة النشر |
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
بدلاً من النموذج الثنائي الكلي لـgetServerSideProps
وgetStaticProps
على مستوى الصفحة في دليلpages
. خيارdynamic
هو طريقة للعودة إلى النموذج السابق كتسهيل ويوفر مسار هجرة أبسط.
-
'auto'
(الافتراضي): الخيار الافتراضي لتخزين أكبر قدر ممكن دون منع أي مكونات من اختيار السلوك الديناميكي. -
'force-dynamic'
: إجبار التصيير الديناميكي (dynamic rendering)، مما سيؤدي إلى تصيير المسارات لكل مستخدم عند وقت الطلب. هذا الخيار يعادلgetServerSideProps()
في دليلpages
. -
'error'
: إجبار التصيير الثابت وتخزين بيانات التخطيط أو الصفحة عن طريق التسبب في خطأ إذا استخدمت أي مكونات وظائف ديناميكية (dynamic functions) أو بيانات غير مخزنة مؤقتاً. هذا الخيار يعادل:getStaticProps()
في دليلpages
.- تعيين خيار كل طلب
fetch()
في تخطيط أو صفحة إلى{ cache: 'force-cache' }
. - تعيين تكوين المقطع إلى
fetchCache = 'only-cache', dynamicParams = false
. dynamic = 'error'
يغير الافتراضي لـdynamicParams
منtrue
إلىfalse
. يمكنك العودة إلى تصيير الصفحات ديناميكياً للمعلمات الديناميكية التي لم يتم إنشاؤها بواسطةgenerateStaticParams
عن طريق تعيينdynamicParams = true
يدوياً.
-
'force-static'
: إجبار التصيير الثابت وتخزين بيانات التخطيط أو الصفحة عن طريق إجبارcookies()
، وheaders()
وuseSearchParams()
على إرجاع قيم فارغة.
معلومة مفيدة:
- يمكن العثور على إرشادات حول كيفية الترقية من
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
.- عندما يكون
dynamicParams = true
، يستخدم المقطع تصيير الخادم المتدفق (Streaming Server Rendering).- إذا تم استخدام
dynamic = 'error'
وdynamic = 'force-static'
، فسيغير الافتراضي لـdynamicParams
إلىfalse
.
revalidate
تعيين وقت إعادة التحقق الافتراضي للتخطيط أو الصفحة. لا يتجاوز هذا الخيار قيمة revalidate
المعينة بواسطة طلبات fetch
الفردية.
export const revalidate = false
// false | 0 | number
export const revalidate = false
// false | 0 | number
false
(الافتراضي): الاستدلال الافتراضي لتخزين أي طلباتfetch
التي تعين خيارcache
الخاص بها إلى'force-cache'
أو التي يتم اكتشافها قبل استخدام وظيفة ديناميكية (dynamic function). يعادل دلالياًrevalidate: Infinity
مما يعني بشكل فعال أنه يجب تخزين المورد إلى أجل غير مسمى. لا يزال بإمكان طلباتfetch
الفردية استخدامcache: 'no-store'
أوrevalidate: 0
لتجنب التخزين المؤقت وجعل المسار يتم تصييره ديناميكياً. أو تعيينrevalidate
إلى رقم موجب أقل من الافتراضي للمسار لزيادة تواتر إعادة التحقق للمسار.0
: التأكد من أن التخطيط أو الصفحة يتم تصييره ديناميكياً (dynamically rendered) دائماً حتى إذا لم يتم اكتشاف أي وظائف ديناميكية أو جلب بيانات غير مخزنة مؤقتاً. يغير هذا الخيار الافتراضي لطلباتfetch
التي لا تعين خيارcache
إلى'no-store'
ولكن يترك طلباتfetch
التي تختار'force-cache'
أو تستخدمrevalidate
موجباً كما هي.number
: (بالثواني) تعيين تواتر إعادة التحقق الافتراضي للتخطيط أو الصفحة إلىn
ثانية.
معلومة مفيدة: خيار
revalidate
متاح فقط عند استخدام وقت تشغيل Node.js (Node.js Runtime). هذا يعني أن استخدام خيارrevalidate
معruntime = 'edge'
لن يعمل.
تواتر إعادة التحقق
- سيحدد أقل
revalidate
عبر كل تخطيط وصفحة لمسار واحد تواتر إعادة التحقق للمسار بالكامل. يضمن هذا إعادة التحقق من الصفحات الفرنية بتواتر مشابه لتخطيطاتها الأصلية. - يمكن لطلبات
fetch
الفردية تعيينrevalidate
أقل منrevalidate
الافتراضي للمسار لزيادة تواتر إعادة التحقق للمسار بالكامل. يسمح لك هذا بالاختيار الديناميكي لإعادة التحقق الأكثر تواتراً لمسارات معينة بناءً على بعض المعايير.
fetchCache
هذا خيار متقدم يجب استخدامه فقط إذا كنت بحاجة تحديداً إلى تجاوز السلوك الافتراضي.
بشكل افتراضي، سيخزن Next.js أي طلبات fetch()
يمكن الوصول إليها قبل استخدام أي وظائف ديناميكية (dynamic functions) ولن يخزن طلبات 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'
لأن ذلك قد يجعل نفس طلب الجلب له سلوك مختلف.
- إذا تم توفير كل من
- يُوصى عمومًا بترك التخطيطات الأصلية المشتركة كـ
'auto'
وتخصيص الخيارات حيث تختلف المقاطع الفرعية.
runtime
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'nodejs'
(الافتراضي)'edge'
تعلم المزيد عن وقت تشغيل Edge و Node.js (Edge and Node.js runtimes).
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 لإضافة حدود تنفيذ محددة.
على سبيل المثال، على Vercel.
ملاحظة: تتطلب هذه الإعدادات Next.js 13.4.10
أو أعلى.
export const maxDuration = 5
export const maxDuration = 5
معلومة مفيدة:
- إذا كنت تستخدم إجراءات الخادم (Server Actions)، فقم بتعيين
maxDuration
على مستوى الصفحة لتغيير المهلة الافتراضية لجميع إجراءات الخادم المستخدمة في الصفحة.
generateStaticParams
يمكن استخدام الدالة generateStaticParams
بالاشتراك مع مقاطع المسار الديناميكية (dynamic route segments) لتحديد قائمة معلمات مقطع المسار التي سيتم إنشاؤها ثابتاً في وقت البناء بدلاً من عند الطلب في وقت الطلب.
راجع مرجع API لمزيد من التفاصيل.