メインコンテンツまでスキップ

template.js

テンプレートファイルは、それぞれの子レイアウトやページをラップするという点でレイアウトと同様です。しかし、ルートをまたいで持続し、状態を維持するレイアウトとは異なり、テンプレートはナビゲーションごとにその子コンポーネントの新しいインスタンスを生成します。

app/template.tsx
export default function Template({ children }: { children: React.ReactNode }) {
return <div>{children}</div>
}

template.js ファイル

あまり一般的ではありませんが、次のような場合にはレイアウトよりもテンプレートの使用を検討できます:

  • useEffect(例: ページビューのログ記録)やuseState(例:ページごとのフィードバックフォーム)に依存する機能がある場合。
  • デフォルトのフレームワークの挙動を変えるため。例えば、レイアウト内のサスペンス境界は最初にレイアウトがロードされたときだけフォールバックを表示し、ページを切り替えたときには表示しません。しかし、テンプレートでは、各ナビゲーションごとにフォールバックが表示されます。

Props

children(必須)

Templateコンポーネントはchildren propを引数に取り、使用しなければなりません。テンプレートはレイアウトとその子コンポーネントの間でレンダリングされます。例えば次のとおりです:

Output
<Layout>
{/* templateには一意のキーが与えられていることに注意してください */}
<Template key={routeParam}>{children}</Template>
</Layout>

Good to know:

  • デフォルトではテンプレートはServer Componentですが、"use client"ディレクティブによりClient Componentとしても使用できます。
  • ユーザーがテンプレートを共有するルート間を移動するとき、コンポーネントの新しいインスタンスがマウントされ、DOM要素が再作成され、状態は保存されず、副作用は再同期されます。

バージョン履歴

VersionChanges
v13.0.0templateの導入