Bercriber's Blog

プログラミング

2021/04/24 11:57


Next.jsで静的にネストしたルーティングでページを生成する

// pages/blog/category/[...id].js

export function getStaticPaths() {
  let ps = getPostList().map(p => getPost(p))

  let categoryList = [Category]
  let categorizedPosts = {CategoryName: [Post]}
  
  // カテゴリーの記事全部を10記事ごとにわけてページを作りたい
  let pageSliceLength = Math.ceil(categorizedPost.length / 10);

  // type Paths = [{params: {id: [path]}]
  // ファイル名が[...id].jsであればidがキーになる
  let paths = []
  for (let category in categorizedPost) {
    for (let index = 0; index < pageSliceLength; index++) {
      // /blog/[$category]/[$index] 
      const id = [category.toString(),index.toString()]
      paths.push({params: {id}})
    }
  }

  return {paths, fallback: false}
}

export function getStaticProps({params}) {
  const [category, index] = params.id

  const ps = getPostList().map(p => getPost(p)).filter(p => p.category == category)
  const posts = ps.slice(index * 10, index * 10 + 10)

  return {
    props: { posts, category, index }
  }
}