Spec-Zone.ru › Next.js

getServerSideProps

При экспорте функции, называемой getServerSideProps (рендеринг на стороне сервера), из страницы, Next.js предварительно рендерит эту страницу при каждом запросе, используя данные, возвращённые getServerSideProps. Это полезно, если вам нужно получать данные, которые часто меняются, и обновлять страницу, чтобы отобразить самые свежие данные.

import type { InferGetServerSidePropsType, GetServerSideProps } from 'next'
 
type Repo = {
  name: string
  stargazers_count: number
}
 
export const getServerSideProps = (async () => {
  // Fetch data from external API
  const res = await fetch('https://api.github.com/repos/vercel/next.js')
  const repo: Repo = await res.json()
  // Pass data to the page via props
  return { props: { repo } }
}) satisfies GetServerSideProps<{ repo: Repo }>
 
export default function Page({
  repo,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
  return (
    <main>
      <p>{repo.stargazers_count}</p>
    </main>
  )
}

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

Параметр контекста

Параметр context представляет собой объект, содержащий следующие ключи:

Имя Описание
params Если эта страница использует динамический маршрут, params содержит параметры маршрута. Если имя страницы [id].js, то params будет выглядеть как { id: ... }.
req Объект HTTP IncomingMessage с дополнительным свойством cookies, которое представляет собой объект со строковыми ключами, сопоставленными со строковыми значениями куки.
res Объект HTTP ответа.
query Объект, представляющий строку запроса, включая параметры динамического маршрута.
preview (Устарело для draftMode) preview является true, если страница находится в режиме предварительного просмотра, и false в противном случае.
previewData (Устарело для draftMode) Набор данных предварительного просмотра, заданный setPreviewData.
draftMode draftMode является true, если страница находится в режиме черновика, и false в противном случае.
resolvedUrl Нормализованная версия запроса URL, которая удаляет префикс _next/data для клиентских переходов и включает исходные значения запроса.
locale Содержит активный язык (если включен).
locales Содержит все поддерживаемые языки (если включены).
defaultLocale Содержит настроенный язык по умолчанию (если включен).

Возвращаемые значения getServerSideProps

Функция getServerSideProps должна возвращать объект с любым из следующих свойств:

props

Объект props представляет собой пару ключ-значение, где каждое значение передаётся компоненту страницы. Он должен быть сериализуемым объектом, чтобы любые переданные свойства можно было сериализовать с помощью JSON.stringify.

export async function getServerSideProps(context) {
  return {
    props: { message: `Next.js is awesome` }, // will be passed to the page component as props
  }
}

notFound

Логическое значение notFound позволяет странице возвращать статус 404 и страница 404. С notFound: true, страница вернёт 404 даже если ранее была успешно сгенерирована страница. Это предназначено для поддержки случаев, когда пользовательский контент удаляется его автором.

export async function getServerSideProps(context) {
  const res = await fetch(`https://.../data`)
  const data = await res.json()
 
  if (!data) {
    return {
      notFound: true,
    }
  }
 
  return {
    props: { data }, // will be passed to the page component as props
  }
}

redirect

Объект redirect позволяет перенаправлять на внутренние и внешние ресурсы. Он должен соответствовать форме { destination: string, permanent: boolean }. В редких случаях вам может потребоваться назначить пользовательский код состояния для старых HTTP клиентов, чтобы правильно перенаправить. В этих случаях вы можете использовать свойство statusCode вместо свойства permanent, но не оба.

export async function getServerSideProps(context) {
  const res = await fetch(`https://.../data`)
  const data = await res.json()
 
  if (!data) {
    return {
      redirect: {
        destination: '/',
        permanent: false,
      },
    }
  }
 
  return {
    props: {}, // will be passed to the page component as props
  }
}

История версий

Версия Изменения
v13.4.0 Маршрутизатор приложений теперь стабилен с упрощенным получением данных
v10.0.0 locale, locales, defaultLocale, и notFound параметры добавлены.
v9.3.0 getServerSideProps введён.

© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/pages/api-reference/functions/get-server-side-props

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API