947 words
5 minutes
Reactの初回表示が気になってNext.jsを触り始めた話

関連記事#


ある日、Reactで作っていた画面を眺めていて少し気になることがあった。

別に遅いわけではない。

むしろ普通に動いている。

ただ、ページを開いた瞬間だけカテゴリ画像が表示されない。

一瞬だけ。

ほんの一瞬。

でも一度気になり始めると気になる。


最初に疑ったこと#

当時の構成は Django + React。

カテゴリ一覧や画像はAPIから取得していた。

ざっくりこんな感じ。

useEffect(() => {
fetchCategoryList();
}, []);

つまり流れとしては、

ページ表示
React起動
API取得
再描画

になる。

Reactとしては普通。

むしろ王道。

ただ、その取得が終わるまで画像は存在しない。

だから一瞬だけ空になる。


「SSRってやつでは?」#

ここで思った。

SSRってやつを使えばいいのでは?

正直この時点ではSSRをちゃんと理解していたわけではない。

ただ、

「サーバー側で先にHTMLを作る」

くらいの認識はあった。

もしサーバー側でカテゴリデータを持った状態で画面を作れれば、

最初から画像が表示される。

なんか良さそう。


Next.jsという選択肢#

ReactでSSRといえばNext.js。

名前は知っていた。

触ったことはほぼない。

でも世の中の記事を見ると、

ReactやってるならNext.js

みたいな空気感がある。

じゃあ今のReactをNext.jsへ移行すれば解決するんじゃないか。

そんな感じで調べ始めた。


思ったより世界が違う#

最初は

「Reactの上位互換みたいなもんやろ」

と思っていた。

違った。

思ったより別物だった。

まずルーティングの考え方が違う。

フォルダ構成も違う。

データ取得の考え方も違う。

そして記事によって書いてある内容が違う。


最初の違和感#

調べていると、

こんなコードが出てくる。

export async function getServerSideProps() {
...
}

なるほど。

これがSSRか。

と思った。

ところが別の記事では全然違う書き方をしている。

何が違うんやろう。


後から知ったこと#

後になって知った。

Next.jsには大きく分けて

  • Pages Router
  • App Router

がある。

そして記事によって前提が違う。

自分はそのことを知らずに、

Pages Routerの記事とApp Routerの記事を行ったり来たりしていた。

今思えば当然やけど、

当時は普通に混乱していた。


この時点ではまだ前向きだった#

ただ、この時点ではまだ楽しかった。

知らない技術を触るのは面白い。

SSRもなんかすごそう。

初回表示も速くなりそう。

SEOも良くなりそう。

なんか全部良くなりそう。

そんな気がしていた。


当時の自分メモ#

この時点では、

「ReactからNext.jsへ移行する」

ことに特に疑問は持っていなかった。

むしろ、

「ReactやるならNext.jsにした方がいいんじゃないか」

くらいに思っていた。

次回、

実際に動かし始めてから、

思った以上に話が大きくなっていく。