getInitialProps
Полезно знать:
getInitialProps— это устаревший API. Рекомендуется использоватьgetStaticPropsилиgetServerSideProps.
getInitialProps — это асинхронная функция, которую можно добавить в экспортируемый по умолчанию React-компонент страницы. Она выполняется как на стороне сервера, так и на стороне клиента при переходах между страницами. Результат функции передаётся в React-компонент в качестве props.
import { NextPageContext } from 'next'
Page.getInitialProps = async (ctx: NextPageContext) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default function Page({ stars }: { stars: number }) {
return stars
}Page.getInitialProps = async (ctx) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default function Page({ stars }) {
return stars
}Полезно знать:
- Данные, возвращаемые
getInitialProps, сериализуются при серверном рендеринге. Убедитесь, что возвращаемый объект — это простойObject, а неDate,MapилиSet.- При первоначальной загрузке страницы
getInitialPropsвыполняется только на сервере. При переходе на другой маршрут с помощью компонентаnext/linkилиnext/routerфункция также выполняется на клиенте.- Если
getInitialPropsиспользуется в кастомном_app.js, а целевая страница используетgetServerSideProps, тоgetInitialPropsтакже выполнится на сервере.
Объект Context
getInitialProps принимает один аргумент context — объект со следующими свойствами:
| Имя | Описание |
|---|---|
pathname | Текущий маршрут, путь к странице в /pages |
query | Строка запроса URL, преобразованная в объект |
asPath | Фактический путь (включая запрос), отображаемый в браузере |
req | Объект HTTP-запроса (только на сервере) |
res | Объект HTTP-ответа (только на сервере) |
err | Объект ошибки, если во время рендеринга возникла ошибка |
Ограничения
getInitialPropsможно использовать только в файлах верхнего уровняpages/, но не во вложенных компонентах. Для получения данных на уровне компонентов рассмотрите возможность использования App Router.- Независимо от того, является ли маршрут статическим или динамическим, любые данные, возвращаемые
getInitialPropsкакprops, будут доступны для просмотра на стороне клиента в исходном HTML. Это необходимо для корректной гидратации страницы. Убедитесь, что вы не передаёте вpropsникакой конфиденциальной информации, которая не должна быть доступна на клиенте.