getStaticProps
ISRの1機能
getInitialPropsのISR版のAPI
build時にpre-renderする
必ずserver sideのみで実行される
docs
docs
実行されるタイミング
build時
rebalidate時
返り値
props
そのComponentに渡すprops
このデータは、build時にアクセスしたもの、になる
例えば「いいね数」もリアルタイムではなくビルド時のもの、になる
リクエストを繰り返しても値は変わらない
revalidate :: number
build時以降もデータを更新するために指定する
秒数を指定する
例えば10なら10秒
stale-while-revalidateで再buildする
例として60を指定したとする
ビルド後、0~60秒までにアクセスした場合は、ビルド時の静的ファイル(v1)を返却
61秒後以降(例えば70秒)に初めてアクセスした場合も、v1を返却
ただし、このタイミングで裏でそのページを再生成する(v2)
61秒後に2回目以降にアクセスした場合は、v2を返却
getStaticPathsに指定していないpathにアクセスした場合は
そもそもbuild時に静的ページが存在していないので、アクセス時にSSRして返す
2回目以降のアクセスについては他の例と同じ
なんで「n秒後に更新」?
「リクエストがあったら裏で更新(つまり0秒)」とかでいいじゃん
request多すぎたらきつくなるからでしょmrsekut.icon
notFound
404ページを表示するかどうか
データが無かった時にこれを指定するなど
code:ts
export async function getStaticProps(context) {
...
if (!data) {
return {
notFound: true,
}
}
...
}
docs参照
#??
何のpropsも返さないのにgetStaticPropsを呼ぶことはあるか?
InferGetStaticPropsType
getStaticPropsの返り値から、Pageに渡すPropsの型を推論する
https://nextjs.org/docs/basic-features/data-fetching#typescript-use-getstaticprops
https://zenn.dev/catnose99/articles/7201a6c56d3c88
https://zenn.dev/eitches/articles/2021-0424-getstaticprops-type
Incremental Static Regeneration で実現する次世代のサーバーアーキテクチャ - mizdev
Next.jsにおけるSSG(静的サイト生成)とISRについて(自分の)限界まで丁寧に説明する - Qiita
わかりやすいmrsekut.icon