半年ほど前に, 知人とサウナに行った際に『時代はNext.js. ISRが凄い』というお話を聞いており,
TogelloというサービスのWeb版を作成する際に, ISRを体験したいためだけにNext.jsで作成した.
機能の一つで日程調整の詳細画面があり, getStaticProps
内でOGP画像を生成するという処理にしていた.
しかし, 遷移方法や表示回数によって, OGP画像を認識する時としない時があり, 挙動の調査をした.
調査の結果わかったことは以下の3つ.
ここから予測できることは,
next/link
や next/router
で遷移した際は, ページの表示した後にデータを非同期で取得しているっぽい?初回アクセスした際に静的ページを生成したい場合は, aタグ
で遷移させるか,
window.location.href
で遷移することで, 静的ページが生成されると思う.
propsの値を利用する場合は, 表示されるまでローディングを表示したり,
const router = useRouter()
if (router.isFallback) {
return <div>Loading...</div>
}
取得するまで再読み込みなどで対応できると思う.
useEffect(() => {
if (!hoge) {
setTimeout(() => location.reload(), 300)
}
}, [props.hoge])
実際触ってみて, 知人が教えてくださった素晴らしさを理解することができた.
前職でNext.jsは触っていたが, SSRオンリーだったため, Togelloを作ってみて, このページはSSRでこのページはISRみたいにできるのを知って本当に感動した.
統合開発環境さんのISRでブログを作ってみて気づいたこと・ハマったことがとても分かりやすかったため, ISRの挙動について詳細に調べておらず, 僕自身Next.jsの知識が乏しいため間違っている部分が多くあると思うので, Twitterなどで指摘してくれると嬉しい.
Twitterフォロー待ってます!