API¶
Next CLI¶
Next CLI позволяет запускать, собирать и экспортировать приложение.
Команда для получения списка доступных команд:
1 |
|
Пример передачи аргументов:
1 2 3 |
|
Сборка¶
Команда next build
создает оптимизированную производственную сборку приложения. Для каждого роута отображается:
- размер (size) — количество ресурсов, загружаемых при запросе страницы на стороне клиента
- первоначально загружаемый (first load) JS — количество ресурсов, загружаемых при получении страницы от сервера
Флаг --profile
позволяет включить производственный профайлинг:
1 |
|
Флаг --verbose
позволяет получить более подробный вывод:
1 |
|
Разработка¶
Команда next dev
запускает приложение в режиме разработки с быстрой перезагрузкой кода, отчетами об ошибках и т. д.
По умолчанию приложение запускается по адресу http://localhost:3000
. Порт может быть изменен с помощью флага -p
:
1 |
|
Для этого также можно использовать переменную PORT
:
1 |
|
Дефолтный хост (0.0.0.0
) можно изменить с помощью флага -H
:
1 |
|
Продакшн¶
Команда next start
запускает приложение в производственном режиме. Перед этим приложение должно быть скомпилировано с помощью next build
.
Линтер¶
Команда next lint
запускает ESLint для всех файлов в директориях pages
, components
и lib
. Дополнительные директории для проверки могут быть определены с помощью флага --dir
:
1 |
|
Create Next App¶
CLI create-next-app
— это простейший способ создать болванку Next-проекта.
1 2 3 |
|
Или, если вам требуется поддержка TypeScript:
1 2 3 |
|
Настройки¶
--ts
,--typescript
— инициализация TS-проекта-e
,--example [example-name][github-url]
— инициализация проекта на основе примера. В URL может быть указана любая ветка и/или поддиректория--example-path [path-to-example]
--use-npm
next/router¶
useRouter¶
Хук useRouter
позволяет получить доступ к объекту router
в любом функциональном компоненте:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Объект router¶
Объект router
возвращается useRouter
и withRouter
и содержит следующие свойства:
pathname: string
— текущий роут, путь страницы из/pages
безbasePath
илиlocale
query: object
— строка запроса, разобранная в объект. По умолчанию имеет значение{}
asPath: string
— путь (включая строку запроса), отображаемый в браузере, безbasePath
илиlocale
isFallback: boolean
— находится ли текущая страница в резервном режиме?basePath: string
— активный базовый путьlocale: string
— активная локальlocales: string[]
— поддерживаемые локалиdefaultLocale: string
— дефолтная локальdomainsLocales: Array<{ domain, defaultLocalem locales }>
— локали для доменовisReady: boolean
— готовы ли поля роутера к использованию? Может использоваться только вuseEffect
isPreview: boolean
— находится ли приложение в режиме предварительного просмотра?
router.push¶
Метод router.push
предназначен для случаев, когда next/link
оказывается недостаточно.
1 |
|
url: string | object
— путь для навигацииas: string | object
— опциональный декоратор для адреса страницы при отображении в браузереoptions
— опциональный объект со следующими свойствами:scroll: boolean
— выполнять ли прокрутку в верхнюю часть области просмотра при переключении страницы? По умолчанию имеет значениеtrue
shallow: boolean
— позволяет обновлять путь текущей страницы без использованияgetStaticProps
, getServerSideProps илиgetInitialProps
. По умолчанию имеет значениеfalse
locale: string
— локаль новой страницы
Использование. Переключение на страницу pages/about.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Переключение на страницу pages/post/[pid].js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Перенаправление пользователя на страницу pages/login.js
(может использоваться для реализации защищенных страниц):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Пример использования объекта вместо строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
router.replace¶
Метод router.replace
обновляет путь текущей страницы без добавления URL в стек history
.
1 |
|
Использование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
router.prefetch¶
Метод router.prefetch
позволяет выполнять предварительную загрузку страниц для ускорения навигации. Обратите внимание: next/link
выполняет предварительную загрузку страниц автоматически.
1 |
|
Использование. Предположим, что после авторизации мы перенаправляем пользователя на страницу профиля. Для ускорения навигации мы можем предварительно загрузить страницу профиля:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
router.beforePopState¶
Метод router.beforePopState
позволяет реагировать на событие popstate
перед обработкой пути роутером.
1 |
|
cb
— это функция, которая запускается при возникновении события popstate
. Данная функция получает объект события со следующими свойствами:
url: string
— путь для нового состояния (как правило, название страницы)as: string
— URL, который будет отображен в браузереoptions: object
— дополнительные настройки изrouter.push
Использование. beforePopState
может использоваться для модификации запроса или принудительного обновления SSR, как в следующем примере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
router.back¶
Данный метод позволяет вернуться к предыдущей странице. При его использовании выполняется window.history.back()
:
1 2 3 4 5 6 7 8 9 10 11 |
|
router.reload¶
Данный метод перезагружает текущий URL. При его использовании выполняется window.location.reload()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
router.events¶
Использование роутера приводит к возникновению следующих событий:
routeChangeStart(url, { shallow })
— возникает в начале обновления роутаrouteChangeComplete(url, { shallow })
— возникает в конце обновления роутаrouteChangeError(err, url, { shallow })
— возникает при провале или отмене обновления роутаbeforeHistoryChange(url, { shallow })
— возникает перед изменением истории браузераhashChangeStart(url, { shallow })
— возникает в начале изменения хеш-части URL (но не самого URL)hashChangeComplete(url, { shallow })
— возникает в конце изменения хеш-части URL (но не самого URL)
Обратите внимание: здесь url
— это адрес страницы, отображаемый в браузере, включая basePath
.
Использование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
withRouter¶
Вместо useRouter
может использоваться withRouter
:
1 2 3 4 5 6 7 |
|
TypeScript¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
next/link¶
Компонент Link
, экспортируемый из next/link
, позволяет переключаться между страницами на стороне клиента.
Предположим, что в директории pages содержатся следующие файлы:
1 2 3 |
|
Пример навигации по этим страницам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Link
принимает следующие пропы:
href
— путь или URL для навигации. Единственный обязательный пропas
— опциональный декоратор пути, отображаемый в адресной строке браузераpassHref
— указываетLink
передать пропhref
дочернему компоненту. По умолчанию имеет значениеfalse
prefetch
— предварительная загрузка страницы в фоновом режиме. По умолчанию —true
. Предварительная загрузка страницы выполняется для любогоLink
, находящегося в области просмотра (изначально или при прокрутке). Предварительная загрузка может быть отключена с помощьюprefetch={false}
. Однако даже в этом случае предварительная загрузка выполняется при наведении курсора на ссылку. Для страниц со статической генерацией загружается JSON-файл для более быстрого переключения страницы. Предварительная загрузка выполняется только в производственном режимеreplace
— заменяет текущее состояние истории вместо добавления нового URL в стек. По умолчанию —false
scroll
— выполнение прокрутки в верхнюю часть области просмотра. По умолчанию —true
shallow
— обновление пути текущей страницы без перезапускаgetStaticProps
,getServerSideProps
илиgetInitialProps
. По умолчанию —false
locale
— по умолчанию к пути добавляется активная локаль.locale
позволяет определить другую локаль. Когда имеет значениеfalse
, пропhref
должен включать локаль
Роут с динамическими сегментами¶
Пример динамического роута для pages/blog/[slug].js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Кастомный компонент — обертка для тега a¶
Если дочерним компонентом Link
является кастомный компонент, оборачивающий a
, Link
должен иметь проп passHref
. Это необходимо при использовании таких библиотек как styled-components. Без этого тег a
не получит атрибут href
, что негативно скажется на доступности и SEO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Функциональный компонент¶
Если дочерним компонентом Link
является функция, то кроме passHref
, необходимо обернуть ее в React.forwardRef
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Объект URL¶
Link
также принимает объект URL. Данный объект автоматически преобразуется в строку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
В приведенном примере у нас имеются ссылки на:
- предопределенный роут:
/about?name=test
- динамический роут:
/blog/my-post
Замена URL¶
1 2 3 |
|
Отключение прокрутки¶
1 2 3 |
|
next/image¶
Обязательные пропы¶
Компонент Image
принимает следующие обязательные пропы:
src
— статически импортированный файл или строка, которая может быть абсолютной ссылкой или относительным путем в зависимости от пропаloader
или настроек загрузки. При использовании ссылок на внешние ресурсы, эти ресурсы должны быть указаны в разделеdomains
файлаnext.config.js
width
— ширина изображения в пикселях: целое число без единицы измеренияheight
— высота изображения в пикселях: целое число без единицы измерения
Опциональные пропы¶
layout
—intrinsic | fixed | responsive | fill
. Значением по умолчанию являетсяintrinsic
loader
— кастомная функция для разрешения URL. Установка этого пропа перезаписывает настройки из разделаimages
вnext.config.js
.loader
принимает параметрыsrc
,width
иquality
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
sizes
— строка, содержащая информацию о ширине изображения на различных контрольных точках. По умолчанию имеет значение100vw
при использованииlayout="responsive"
илиlayout="fill"
quality
— качество оптимизированного изображения: целое число от 1 до 100, где 100 — лучшее качество. Значением по умолчанию является 75priority
— еслиtrue
, изображение будет считаться приоритетным и загружаться предварительно. Ленивая загрузка для такого изображения будет отключенаplaceholder
— заменитель изображения. Возможными значениями являютсяblur
иempty
. Значением по умолчанию являетсяempty
. Когда значением являетсяblur
, в качестве заменителя используется значение пропаblurDataURL
. Если значениемsrc
является объект из статического импорта и импортированное изображение имеет формат JPG, PNG, WebP или AVIF,blurDataURL
заполняется автоматически
Пропы для продвинутого использования¶
objectFit
— определяет, как изображение заполняет родительский контейнер при использованииlayout="fill"
objectPosition
— определяет, как изображение позиционируется внутри родительского контейнера при использованииlayout="fill"
onLoadingComplete
— функция, которая вызывается после полной загрузки изображения и удаления заменителяlazyBoundary
— строка, определяющая ограничительную рамку для определения пересечения области просмотра с изображением для запуска его ленивой загрузки. По умолчанию имеет значение200px
unoptimized
— еслиtrue
, источник изображения будет использоваться как есть, без изменения качества, размера или формата. Значением по умолчанию являетсяfalse
Другие пропы¶
Любые другие пропы компонента Image
передаются дочернему элементу img
, кроме следующих:
style
— для стилизации изображения следует использоватьclassName
srcSet
— следует использовать размеры устройстваref
— следует использовать onLoadingCompletedecoding
— всегдаasync
Настройки¶
Настройки для обработки изображений определяются в файле next.config.js
.
Домены. Настройка доменов для провайдеров изображений позволяет защитить приложение от атак, связанных с внедрением в изображение вредоносного кода.
1 2 3 4 5 |
|
Размеры устройств. Настройка deviceSizes
позволяет определить список контрольных точек для ширины устройств потенциальных пользователей. Эти контрольные точки предназначены для предоставления подходящего изображения при использовании layout="responsive"
или layout="fill"
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Размеры изображений. Настройка imageSizes
позволяет определить размеры изображений в виде списка. Этот список объединяется с массивом размеров устройств для формирования полного перечня размеров для генерации набора источников (srcset
) изображения.
1 2 3 4 5 |
|
next/head¶
Компонент Head
позволяет добавлять элементы в head
страницы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Проп key
позволяет дедуплицировать теги:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
В данном случае будет отрендерен только <meta property="og:title" content="Новый заголовок страницы" key="title" />
.
Контент head
удаляется при размонтировании компонента.
title
, meta
и другие элементы должны быть прямыми потомками Head
. Они могут быть обернуты в один <React.Fragment>
или рендериться из массива.
next/server¶
Посредники создаются с помощью функции middleware
, находящейся в файле _middleware
. Интерфейс посредников основан на нативных объектах FetchEvent
, Response
и Request
.
Эти нативные объекты расширены для предоставления большего контроля над формированием ответов на основе входящих запросов.
Сигнатура функции:
1 2 3 4 5 6 7 8 9 |
|
Функция не обязательно должна называться middleware
. Это всего лишь соглашение. Функция также не обязательно должна быть асинхронной.
NextRequest¶
Объект NextRequest
расширяет нативный интерфейс Request
следующими методами и свойствами:
cookies
— куки запросаnextUrl
— расширенный, разобранный объект URL, предоставляющий доступ к таким свойствам, какpathname
,basePath
,trailingSlash
иi18n
geo
— геоинформация о запросеcountry
— код страныregion
— код регионаcity
— городlatitude
— долготаlongitude
— широтаip
— IP-адрес запросаua
— агент пользователя
NextRequest
может использоваться вместо Request
.
1 |
|
NextFetchEvent¶
NextFetchEvent
расширяет объект FetchEvent
методом waitUntil
.
Данный метод позволяет продолжить выполнение функции после отправки ответа.
Например, waitUntil
может использоваться для интеграции с такими системами мониторинга ошибок, как Sentry
.
1 |
|
NextResponse¶
NextResponse
расширяет Response
следующими методами и свойствами:
cookies
— куки ответаredirect()
— возвращаетNextResponse
с набором перенаправлений (redirects
)rewrite()
— возвращаетNextResponse
с набором перезаписей (rewrites
)next()
— возвращаетNextResponse
, который является частью цепочки посредников
1 |
|