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