Как getStaticPaths и getStaticProps работают вместе?

#reactjs #next.js

Вопрос:

Я прочитал Next.js документы, и я знаю, как работать как с getStaticProps, так и с getStaticPaths.

Чего мне не хватает, так это того, как они на самом деле работают вместе? Я имею в виду, когда именно вызывается getStaticProps (при использовании с getStaticPaths в файле [slug].js) ?

В моем анализе (в котором я не уверен) я думаю, что getStaticProps «каким-то образом» вызывается внутри цикла getStaticPaths, поэтому getStaticPaths запускает getStaticProps для каждого объекта в его переменной «пути», я прав?

Найдите мой комментарий в этом фрагменте кода:

 export async function getStaticPaths() {
  // 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 pre-render based on posts
  const paths = posts.map((post) => ({
    params: { id: post.id },
  }))
// getStaticProps is called somewhere in the previous loop???

  
  return { paths, fallback: false }
}

export async function getStaticProps({ params }) {
  // params contains the post `id`.
  // If the route is like /posts/1, then params.id is 1
  const res = await fetch(`https://.../posts/${params.id}`)
  const post = await res.json()

  // Pass post data to the page via props
  return { props: { post } }
}

export default Post
 

Я также хочу подтвердить другое понимание, изменяет ли getStaticPaths переменную контекста, назначая ключ параметров для каждого объекта в массиве путей, поэтому, когда он вызывает getStaticProps, параметры будут обновлены в контексте (к которому обе функции имеют доступ) и готовы для getStaticProps?

Я прочитал Next.js документы и просмотрел много видео о получении данных в Next.js, но все еще не нашел ответа на свои вопросы.

Спасибо, Таха

Ответ №1:

getStaticPaths называется первым. Вы возвращаете некоторые параметры и массив параметров для ввода getStaticProps .

getStaticProps затем вызывается один раз для каждого набора параметров, из которого вы вернулись getStaticPaths . Этот шаг также выполняется параллельно, чтобы ускорить сборку.