getStaticPaths
Если страница содержит динамические маршруты и использует getStaticProps, ей необходимо определить список путей для статического генерации.
Когда вы экспортируете функцию под названием getStaticPaths (статическое создание сайта) из страницы, использующей динамические маршруты, Next.js будет статически предварительно рендерить все пути, указанные в getStaticPaths.
import type {
InferGetStaticPropsType,
GetStaticProps,
GetStaticPaths,
} from 'next'
type Repo = {
name: string
stargazers_count: number
}
export const getStaticPaths = (async () => {
return {
paths: [
{
params: {
name: 'next.js',
},
}, // See the "paths" section below
],
fallback: true, // false or "blocking"
}
}) satisfies GetStaticPaths
export const getStaticProps = (async (context) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo = await res.json()
return { props: { repo } }
}) satisfies GetStaticProps<{
repo: Repo
}>
export default function Page({
repo,
}: InferGetStaticPropsType<typeof getStaticProps>) {
return repo.stargazers_count
}В getStaticPaths справочнике API рассматриваются все параметры и свойства, которые можно использовать с getStaticPaths.
Когда следует использовать getStaticPaths?
Вы должны использовать getStaticPaths если вы предварительно рендерите страницы, использующие динамические маршруты, и:
- Данные поступают из headless CMS
- Данные поступают из базы данных
- Данные поступают из файловой системы
- Данные могут быть открыто кэшированы (не специфичные для пользователя)
- Страница должна быть предварительно рендерена (для SEO) и быть очень быстрой —
getStaticPropsгенерируетHTMLиJSONфайлы, оба из которых могут быть кэшированы CDN для повышения производительности
Когда выполняется getStaticPaths
getStaticPaths будет выполняться только во время сборки в режиме production, она не будет вызываться во время выполнения. Вы можете проверить, что код, написанный внутри getStaticPaths, удален из клиентского пакета, с помощью этого инструмента.
Как работает getStaticProps по отношению к getStaticPaths
-
getStaticPropsвыполняется во времяnext buildдля любогоpathsвозвращаемого во время сборки -
getStaticPropsвыполняется в фоновом режиме при использованииfallback: true -
getStaticPropsвызывается до начального рендеринга при использованииfallback: blocking
Где можно использовать getStaticPaths
-
getStaticPathsдолжен использоваться сgetStaticProps - Вы не можете использовать
getStaticPathsсgetServerSideProps - Вы можете экспортировать
getStaticPathsиз динамического маршрута, который также используетgetStaticProps - Вы не можете экспортировать
getStaticPathsиз файла, который не является страницей (например, из папкиcomponents) - Вы должны экспортировать
getStaticPathsкак отдельную функцию, а не как свойство компонента страницы
Выполняется при каждом запросе в режиме разработки
В режиме разработки (next dev), getStaticPaths будет вызываться при каждом запросе.
Генерация путей по запросу
getStaticPaths позволяет контролировать, какие страницы генерируются во время сборки, а не по запросу с помощью fallback. Генерация большего количества страниц во время сборки приведет к более медленной сборке.
Вы можете отложить генерацию всех страниц по запросу, вернув пустой массив для paths. Это особенно полезно при развертывании вашего приложения Next.js в нескольких средах. Например, вы можете ускорить сборку, генерируя все страницы по запросу для предварительных просмотров (но не для сборок в production). Это полезно для сайтов с сотнями/тысячами статических страниц.
export async function getStaticPaths() {
// When this is true (in preview environments) don't
// prerender any static pages
// (faster builds, but slower initial page load)
if (process.env.SKIP_BUILD_STATIC_GENERATION) {
return {
paths: [],
fallback: 'blocking',
}
}
// Call an external API endpoint to get posts
const res = await fetch('https://.../posts')
const posts = await res.json()
// Get the paths we want to prerender based on posts
// In production environments, prerender all pages
// (slower builds, but faster initial page load)
const paths = posts.map((post) => ({
params: { id: post.id },
}))
// { fallback: false } means other routes should 404
return { paths, fallback: false }
}
© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths