getServerSideProps
getServerSideProps — это функция Next.js, которая позволяет получать данные и рендерить содержимое страницы во время запроса.
Пример
Вы можете использовать getServerSideProps, экспортировав её из компонента страницы. В примере ниже показано, как можно получить данные из стороннего API в getServerSideProps и передать их на страницу через пропсы:
import type { InferGetServerSidePropsType, GetServerSideProps } from 'next'
type Repo = {
name: string
stargazers_count: number
}
export const getServerSideProps = (async () => {
// Получаем данные из внешнего API
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo: Repo = await res.json()
// Передаём данные на страницу через пропсы
return { props: { repo } }
}) satisfies GetServerSideProps<{ repo: Repo }>
export default function Page({
repo,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
return (
<main>
<p>{repo.stargazers_count}</p>
</main>
)
}export async function getServerSideProps() {
// Получаем данные из внешнего API
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo = await res.json()
// Передаём данные на страницу через пропсы
return { props: { repo } }
}
export default function Page({ repo }) {
return (
<main>
<p>{repo.stargazers_count}</p>
</main>
)
}Когда следует использовать getServerSideProps?
Используйте getServerSideProps, если вам нужно рендерить страницу, которая зависит от персональных данных пользователя или информации, доступной только во время запроса. Например, заголовки authorization или геолокация.
Если вам не нужно получать данные во время запроса или вы предпочитаете кешировать данные и предварительно рендеренный HTML, рекомендуем использовать getStaticProps.
Поведение
getServerSidePropsвыполняется на сервере.getServerSidePropsможно экспортировать только из страницы.getServerSidePropsвозвращает JSON.- Когда пользователь посещает страницу,
getServerSidePropsиспользуется для получения данных во время запроса, и эти данные применяются для рендеринга начального HTML страницы. - Пропсы, переданные в компонент страницы, могут быть видны на клиенте как часть начального HTML. Это необходимо для корректного гидратирования страницы. Убедитесь, что вы не передаёте в пропсах никакой чувствительной информации, которая не должна быть доступна на клиенте.
- Когда пользователь переходит на страницу через
next/linkилиnext/router, Next.js отправляет API-запрос на сервер, который выполняетgetServerSideProps. - При использовании
getServerSidePropsне нужно вызывать API Route Next.js для получения данных, так как функция выполняется на сервере. Вместо этого вы можете напрямую обращаться к CMS, базе данных или другим сторонним API изgetServerSideProps.
Полезно знать:
- См. справочник по API
getServerSidePropsдля получения информации о параметрах и пропсах, которые можно использовать сgetServerSideProps.- Вы можете использовать инструмент next-code-elimination, чтобы проверить, что Next.js исключает из клиентского бандла.
Обработка ошибок
Если внутри getServerSideProps возникает ошибка, будет показан файл pages/500.js. Ознакомьтесь с документацией по странице 500, чтобы узнать больше о её создании. В режиме разработки этот файл не используется, вместо него отображается оверлей с ошибкой.
Особые случаи
Кеширование при рендеринге на стороне сервера (SSR)
Вы можете использовать заголовки кеширования (Cache-Control) внутри getServerSideProps для кеширования динамических ответов. Например, с помощью stale-while-revalidate.
// Это значение считается актуальным в течение десяти секунд (s-maxage=10).
// Если запрос повторяется в течение следующих 10 секунд, будет использоваться
// закешированное значение. Если запрос повторяется в течение 59 секунд,
// закешированное значение будет устаревшим, но всё равно отобразится (stale-while-revalidate=59).
//
// На фоне будет выполнен запрос на повторную валидацию, чтобы обновить кеш
// новым значением. Если обновить страницу, вы увидите новое значение.
export async function getServerSideProps({ req, res }) {
res.setHeader(
'Cache-Control',
'public, s-maxage=10, stale-while-revalidate=59'
)
return {
props: {},
}
}Однако перед использованием cache-control рекомендуем оценить, подходит ли getStaticProps с ISR для вашего случая.
Формы и мутации
Узнайте, как обрабатывать отправку форм и мутации данных в Next.js.
Получение данных на стороне клиента
Узнайте о получении данных на стороне клиента и о том, как использовать SWR — библиотеку React Hooks для получения данных, которая обрабатывает кэширование, ревалидацию, отслеживание фокуса, повторное получение данных по интервалу и многое другое.