- やりたいこと
/blog/[$category]/[$index]
みたいなページをビルド時に生成したい
- やったこと
/blog/[...id].js
のgetStaticPathsでがんばる
- つまずいたこと
/blog/[id].js
ではネストしたパスのページは生成できない
- 気になること
getStaticPaths
とgetStaticProps
で二回ポスト一覧を取得している
- 関数の外で書けばいいだけ?今気づいたのであとでためす
// 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 }
}
}