Конфигурация сегментов маршрутов (Route Segment Config)
Параметры сегментов маршрутов позволяют настроить поведение Страниц, Макетов или Обработчиков маршрутов (Route Handlers) путем прямого экспорта следующих переменных:
Параметр | Тип | По умолчанию |
---|---|---|
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
.- Установке параметра
{ cache: 'force-cache' }
для всех запросовfetch()
в макете или странице. - Установке конфигурации сегмента в
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 functions). Эквивалентноrevalidate: Infinity
, что означает бессрочное кэширование. Отдельные запросыfetch
могут использоватьcache: 'no-store'
илиrevalidate: 0
для избежания кэширования и динамического рендеринга маршрута. Или установитьrevalidate
на положительное число меньше значения по умолчанию для увеличения частоты повторной валидации.0
: Гарантирует динамический рендеринг (dynamic rendering) макета или страницы, даже если не обнаружены динамические функции или некешированные запросы данных. Этот параметр изменяет значение по умолчанию для запросовfetch
без параметраcache
на'no-store'
, но оставляет запросы с'force-cache'
или положительнымrevalidate
без изменений.number
: (в секундах) Устанавливает частоту повторной валидации по умолчанию для макета или страницы вn
секунд.
Полезно знать: Параметр
revalidate
доступен только при использовании Node.js Runtime. Использованиеrevalidate
сruntime = 'edge'
не работает.
Частота повторной валидации
- Наименьшее значение
revalidate
среди всех макетов и страниц одного маршрута определяет частоту повторной валидации для всего маршрута. Это гарантирует, что дочерние страницы повторно валидируются так же часто, как их родительские макеты. - Отдельные запросы
fetch
могут устанавливать значение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
и не кэширует запросы после динамических функций.'default-cache'
: Разрешает передавать любой параметрcache
вfetch
, но если параметр не указан, устанавливаетcache: 'force-cache'
. Это означает, что даже запросыfetch
после динамических функций считаются статическими.'only-cache'
: Гарантирует кэширование всех запросовfetch
, устанавливая значение по умолчаниюcache: 'force-cache'
и вызывая ошибку при использованииcache: 'no-store'
.'force-cache'
: Гарантирует кэширование всех запросовfetch
, устанавливая параметрcache
всех запросов в'force-cache'
.'default-no-store'
: Разрешает передавать любой параметрcache
вfetch
, но если параметр не указан, устанавливаетcache: 'no-store'
. Это означает, что даже запросыfetch
перед динамическими функциями считаются динамическими.'only-no-store'
: Гарантирует отсутствие кэширования для всех запросовfetch
, устанавливая значение по умолчаниюcache: 'no-store'
и вызывая ошибку при использованииcache: 'force-cache'
.'force-no-store'
: Гарантирует отсутствие кэширования для всех запросовfetch
, устанавливая параметрcache
всех запросов в'no-store'
. Это заставляет все запросыfetch
повторно выполняться при каждом запросе, даже если указан параметр'force-cache'
.
Поведение между сегментами маршрута
- Параметры, установленные для всех макетов и страниц одного маршрута, должны быть совместимы друг с другом.
- Если указаны и
'only-cache'
, и'force-cache'
, приоритет имеет'force-cache'
. Если указаны и'only-no-store'
, и'force-no-store'
, приоритет имеет'force-no-store'
. Параметрforce-*
изменяет поведение для всего маршрута, поэтому один сегмент с'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'
// 'nodejs' | 'edge'
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'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 не ограничивает выполнение серверной логики (рендеринг страницы или обработка API). Платформы развертывания могут использовать maxDuration
из сборки Next.js для установки ограничений. Например, на Vercel.
Примечание: Для этой настройки требуется Next.js 13.4.10
или выше.
export const maxDuration = 5
export const maxDuration = 5
Полезно знать:
- При использовании Server Actions установите
maxDuration
на уровне страницы, чтобы изменить таймаут по умолчанию для всех Server Actions на странице.
generateStaticParams
Функция generateStaticParams
может использоваться в сочетании с динамическими сегментами маршрутов (dynamic route segments) для определения списка параметров сегментов, которые будут статически сгенерированы во время сборки, а не по запросу.
Подробнее см. в справочнике API.