Конфигурация сегментов маршрута

Опции сегментов маршрута позволяют настроить поведение страницы, макета или обработчика маршрута путем прямого экспорта следующих переменных:

ОпцияТипПо умолчанию
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, а не бинарной модели "всё или ничего" из getServerSideProps и getStaticProps в директории pages. Параметр dynamic позволяет вернуться к предыдущей модели для удобства и упрощения миграции.

  • 'auto' (по умолчанию): Кэшировать максимально возможное количество данных, не препятствуя динамическому поведению компонентов.
  • 'force-dynamic': Принудительно динамический рендеринг и получение некэшированных данных, отключая кэширование запросов fetch и всегда выполняя ревалидацию. Эквивалентно:
    • getServerSideProps() в директории pages.
    • Установке параметра { cache: 'no-store', next: { revalidate: 0 } } для каждого запроса fetch().
    • Установке конфигурации сегмента export const fetchCache = 'force-no-store'.
  • 'error': Принудительно статический рендеринг и кэширование данных, вызывая ошибку при использовании динамических функций или некэшированных данных. Эквивалентно:
    • getStaticProps() в директории pages.
    • Установке параметра { cache: 'force-cache' } для каждого запроса fetch().
    • Установке конфигурации сегмента 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 для динамического рендеринга.
  • 0: Гарантирует динамический рендеринг даже без динамических функций или некэшированных запросов. Изменяет значение cache по умолчанию для fetch на 'no-store', но сохраняет 'force-cache' или положительное revalidate.
  • number: (в секундах) Устанавливает частоту ревалидации по умолчанию.

Важно знать: Параметр revalidate доступен только при использовании Node.js Runtime. Не работает с runtime = 'edge'.

Частота ревалидации

  • Наименьшее значение revalidate среди всех макетов и страниц маршрута определяет частоту ревалидации для всего маршрута.
  • Отдельные запросы fetch могут устанавливать меньшее значение revalidate для увеличения частоты ревалидации.

fetchCache

Это расширенная настройка, которую следует использовать только при необходимости переопределить поведение по умолчанию.

По умолчанию Next.js кэширует запросы 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, но по умолчанию устанавливает 'force-cache'. Даже запросы после динамических функций считаются статическими.
  • 'only-cache': Гарантирует кэширование всех запросов fetch, устанавливая cache: 'force-cache' по умолчанию и вызывая ошибку при cache: 'no-store'.
  • 'force-cache': Устанавливает cache: 'force-cache' для всех запросов fetch.
  • 'default-no-store': Разрешает любой параметр cache для fetch, но по умолчанию устанавливает 'no-store'. Даже запросы до динамических функций считаются динамическими.
  • 'only-no-store': Гарантирует отсутствие кэширования для всех запросов fetch, устанавливая cache: 'no-store' по умолчанию и вызывая ошибку при cache: 'force-cache'.
  • 'force-no-store': Устанавливает cache: 'no-store' для всех запросов fetch, заставляя перезапрашивать данные при каждом запросе.

Поведение между сегментами маршрута

  • Параметры должны быть совместимы между всеми макетами и страницами маршрута.
    • При конфликте 'only-cache' и 'force-cache' приоритет у 'force-cache'. Аналогично для 'only-no-store' и 'force-no-store'.
    • Комбинации 'only-cache' с 'only-no-store' или 'force-cache' с 'force-no-store' недопустимы.
    • Родительский макет не может использовать 'default-no-store', если дочерний использует 'auto' или '*-cache'.
  • Рекомендуется оставлять общие родительские макеты с '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.