Next.jsとmicroCMSでのJamstack環境やSSG環境において、以下のようなシーンが案外少なくないかと思います。
microCMSで管理している全ての投稿記事を静的ファイル生成しておいて、ページによって投稿記事数を変更したい
この場合、API取得を管理しているtsファイル内で、必要記事数分だけ記事データを取得する関数とは別に、下記のように再帰的に数十件ずつ全記事データを取得する関数を用意する方法がオススメです。例では、10件ずつ全記事データを取得するまで繰り返します。
下記コードはご自由にお使いください!
※ご質問にはお答えできませんので予めご承知おきくださいませ。
コード
// built時にキャッシュを無効化するためにユニーク値を追加
const uniqueQueryParam = { timestamp: Date.now().toString() };
// infoの型定義は省略
<中略>
// 全記事データを10件ずつ再帰的に取得する関数
export const getAllInfoList = async (
queries?: MicroCMSQueries,
offset = 0
): Promise<Info[]> => {
const response = await client
.getList<Info>({
endpoint: "info",
queries: {
...queries,
...uniqueQueryParam,
limit: 10,
offset: offset,
orders: "-publishedAt",
},
})
.catch(notFound);
const listData = response.contents;
if (listData.length < 10) {
return listData;
} else {
return [...listData, ...(await getAllInfoList(queries, offset + 10))];
}
};