> Для чего используется getStaticPaths в Next.js (JavaScript, Next.js, TypeScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ДиджиталСектор
Стек: JavaScript, Next.js, TypeScript
> Пример ответа
Короткий ответ
getStaticPaths в Next.js используется для генерации статических страниц с динамическими маршрутами (например, [id].tsx). Он определяет, какие пути должны быть предварительно отрендерены на этапе сборки. Функция возвращает объект с массивом paths и флагом fallback, управляющим поведением для не указанных путей. Это ключевой элемент статической генерации (SSG) для динамических страниц.
Подробное объяснение
getStaticPaths - это асинхронная функция, экспортируемая из файла динамического маршрута в Next.js (например, pages/posts/[id].tsx). Она обязательна при использовании getStaticProps на странице с динамическим маршрутом. Основная задача - сообщить Next.js, какие динамические пути существуют, чтобы на этапе сборки (build time) сгенерировать для них статические HTML-файлы.
Функция возвращает объект с двумя полями:
paths- массив объектов с параметрами маршрута. Каждый объект содержитparamsс ключами, соответствующими динамическим сегментам (например,{ params: { id: '1' } }).fallback- управляет поведением для путей, не указанных вpaths. Возможные значения:false- несуществующие пути возвращают 404.true- Next.js пытается сгенерировать страницу по запросу (ISR-like поведение).'blocking'- запрос ждёт полной генерации страницы на сервере.
getStaticPaths выполняется только на сервере (в Node.js) и не попадает в клиентский бандл. Для больших наборов данных (например, тысячи постов) рекомендуется использовать fallback: true или 'blocking', чтобы не генерировать все страницы сразу.
На практике
В реальных проектах getStaticPaths часто используется для:
- Генерации страниц товаров, блогов, документации.
- Интеграции с headless CMS (Contentful, Strapi) или API.
- Оптимизации производительности за счёт предварительной генерации популярных страниц.
- Реализации инкрементальной статической регенерации (ISR) в сочетании с
revalidateвgetStaticProps.
При работе с большими объёмами данных (10k+ записей) стоит:
- Использовать
fallback: trueили'blocking'. - Разделять генерацию на несколько этапов (например, только топ-100 страниц).
- Добавлять обработку ошибок и fallback UI для несуществующих путей.
Пример кода
TYPESCRIPT// pages/posts/[id].tsximport { GetStaticPaths, GetStaticProps } from 'next';interface Post {id: string;title: string;}export const getStaticPaths: GetStaticPaths = async () => {// Получаем список всех постов из APIconst res = await fetch('https://api.example.com/posts');const posts: Post[] = await res.json();const paths = posts.map((post) => ({params: { id: post.id },}));return {paths,fallback: 'blocking', // или true для постепенной генерации};};export const getStaticProps: GetStaticProps = async ({ params }) => {const res = await fetch(`https://api.example.com/posts/${params?.id}`);const post: Post = await res.json();if (!post) {return { notFound: true };}return {props: { post },revalidate: 60, // ISR: перегенерировать каждые 60 секунд};};
Как отвечать на собеседовании
Начни с краткого определения и назначения. Затем объясни структуру возвращаемого объекта и варианты fallback. Подчеркни, что getStaticPaths работает только с динамическими маршрутами и getStaticProps. Упомяни типичные сценарии использования (блоги, каталоги) и trade-off между временем сборки и гибкостью. Если спросят про производительность, расскажи про ISR и fallback. Избегай углубления в детали реализации без дополнительного вопроса.
Что проверяет интервьюер
- Понимание статической генерации (SSG) и её ограничений.
- Знание lifecycle Next.js: build time vs request time.
- Умение работать с динамическими маршрутами и параметрами.
- Понимание
fallbackи его влияния на UX и SEO. - Способность объяснить, когда использовать
getStaticPathsвместоgetServerSideProps.
Типичные ошибки
- Забывают экспортировать
getStaticPathsиз файла с динамическим маршрутом. - Возвращают
pathsбезparamsили с неверной структурой. - Используют
fallback: falseдля больших наборов данных, что приводит к 404 для новых страниц. - Пытаются использовать
getStaticPathsна статическом маршруте (без квадратных скобок). - Не обрабатывают ошибки при запросах к API внутри
getStaticPaths, что ломает сборку. - Путают
getStaticPathsсgetServerSidePropsи используют их вместе.
> Похожие задачи по frontend
Какие есть виды генерации страниц в Next.js
Что такое серверный рендеринг в Next.js
Как работают middleware в Next.js
Какая проблема при вызове fetch напрямую в компоненте Next.js
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью