Конфигурация сегментов маршрутов
Параметры, описанные на этой странице, отключаются при включении флага
dynamicIO
и в будущем будут устаревшими.
Параметры сегментов маршрутов позволяют настраивать поведение страниц (Page), макетов (Layout) или обработчиков маршрутов (Route Handler) путем прямого экспорта следующих переменных:
Параметр | Тип | По умолчанию |
---|---|---|
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'
: Принудительно включает динамический рендеринг, что приводит к рендерингу маршрутов для каждого пользователя во время запроса. Эквивалентно:- Установке параметра
{ cache: 'no-store', next: { revalidate: 0 } }
для каждого запросаfetch()
в макете или странице. - Установке конфигурации сегмента
export const fetchCache = 'force-no-store'
.
- Установке параметра
'error'
: Принудительно включает статический рендеринг и кэширование данных макета или страницы, вызывая ошибку при использовании динамических API или некэшированных данных. Эквивалентно:getStaticProps()
в директорииpages
.- Установке параметра
{ cache: 'force-cache' }
для каждого запросаfetch()
в макете или странице. - Установке конфигурации сегмента
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'
, или обнаруженных до использования динамических API. Семантически эквивалентноrevalidate: Infinity
, что означает бесконечное кэширование ресурса. Отдельные запросыfetch
могут использоватьcache: 'no-store'
илиrevalidate: 0
, чтобы избежать кэширования и сделать маршрут динамически отрендеренным. Или установитьrevalidate
на положительное число меньше значения по умолчанию маршрута для увеличения частоты повторной валидации.0
: Гарантирует, что макет или страница всегда рендерятся динамически, даже если не обнаружены динамические API или некэшированные запросы данных. Этот параметр изменяет значение по умолчанию для запросовfetch
, не устанавливающих параметрcache
в'no-store'
, но оставляет запросыfetch
с'force-cache'
или положительнымrevalidate
без изменений.number
: (в секундах) Устанавливает частоту повторной валидации по умолчанию для макета или страницы вn
секунд.
Важно знать:
- Значение
revalidate
должно быть статически анализируемым. Например,revalidate = 600
допустимо, аrevalidate = 60 * 10
— нет.- Значение
revalidate
недоступно при использованииruntime = 'edge'
.- В режиме разработки страницы всегда рендерятся по запросу и никогда не кэшируются. Это позволяет сразу видеть изменения без ожидания периода повторной валидации.
Частота повторной валидации
- Наименьшее значение
revalidate
среди всех макетов и страниц одного маршрута определяет частоту повторной валидации для всего маршрута. Это гарантирует, что дочерние страницы валидируются так же часто, как и их родительские макеты. - Отдельные запросы
fetch
могут устанавливать значениеrevalidate
меньше стандартного для маршрута, чтобы увеличить частоту повторной валидации всего маршрута. Это позволяет динамически выбирать более частую валидацию для определенных маршрутов на основе критериев.
fetchCache
Это расширенный параметр, который следует использовать только при необходимости переопределить стандартное поведение.
По умолчанию Next.js будет кэшировать все запросы fetch()
, доступные до использования динамических API, и не будет кэшировать запросы fetch
, обнаруженные после использования динамических API.
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
перед динамическими API с предоставленным параметромcache
и отсутствия кэширования после динамических API.'default-cache'
: Позволяет передавать любой параметрcache
вfetch
, но если параметр не указан, устанавливаетcache: 'force-cache'
. Это означает, что даже запросыfetch
после динамических API считаются статическими.'only-cache'
: Гарантирует, что все запросыfetch
используют кэширование, изменяя значение по умолчанию наcache: 'force-cache'
, если параметр не указан, и вызывая ошибку при использованииcache: 'no-store'
.'force-cache'
: Гарантирует, что все запросыfetch
используют кэширование, устанавливая параметрcache
всех запросов в'force-cache'
.'default-no-store'
: Позволяет передавать любой параметрcache
вfetch
, но если параметр не указан, устанавливаетcache: 'no-store'
. Это означает, что даже запросыfetch
перед динамическими API считаются динамическими.'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
Рекомендуется использовать среду выполнения 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" устарел. Доступен кодмод. |