🐱

NextJS 13.4~ app router 副作用のあるレイアウトはtemplate.tsxを使おう

2023/08/27に公開

App Router の共通レイアウト定義における二つのファイル名

  • layout.tsx
  • template.tsx

この二つの違いと性質についてまとめてみます

コンポーネント内でuseEffectを使いたい場合

template.tsxを使用

layout.tsxは内部でuseEffectを持つことができないようです。
副作用がある処理をしたい場合、app routerの機構に従うとtemplate.tsxを使うのが適切なようです。

副作用のない純粋なUIをレンダリングしたい場合

layout.tsxを使用

副作用を持たない純粋関数として定義できるUIを定義したい場合はlayout.tsxが良さそうです。
基本、layout.tsxに関する記述が多いように見受けられますが、実務上はtemplate.tsxの方が使用する機会が多い気がします(WEB開発の場合)。

WEB制作の場合は逆にtemplate.tsxを使う機会は少ないかもしれません。

公式ドキュメントにもtempalte.tsxの挙動については明言されてなかったので、現状動作確認した限りで分かったことを記載しました

Discussion