はじめに
Next.js app routerのチュートリアルの第4章のアウトプットします。
前の記事
【01】Next.js app routerのチュートリアルやってみる
https://qiita.com/naoyuki2/items/af58da3d20cbc790e767
【02】Next.js app routerのチュートリアルやってみる
https://qiita.com/naoyuki2/items/edf450b3ee135e83d1e8
【03】Next.js app routerのチュートリアルやってみる
https://qiita.com/naoyuki2/items/612221eac233aa9cbb74
第4章 レイアウトとページの作成
この章では下記を学習しました。
- ファイルシステムルーティングを使用する。
- 新しいルートセグメントを作成するときのフォルダーとファイルの役割を理解する。
- 複数のページで共有されるレイアウトを作成する。
- 部分レンダリングとは何かを理解する。
ファイルシステムルーティング
Next.js
ではファイルシステムルーティングというシステムを採用しています。
下の画像のようにフォルダ名がそのままURLになっています。
ですが、ただフォルダを作ればルートができるというわけでもありません。
下の画像のようにフォルダの中にpage.tsx
という名前のファイルを作成することでルートが作成されます。
ちなみにapp/page.tsx
だけは、フォルダ名ではなく、/
だけでアクセスできます。
layout.tsx
layout.tsx
は第2章で勉強したように、アプリケーション全体に共有されるものです。
ですが、下の画像のようにdashboard
フォルダ直下に、layout.tsx
を追加すると、
- /dashboard/page.tsx
- /dashboard/customers/page.tsx
- /dashboard/invoices/page.tsx
の3つのファイルすべてに共有されます。
逆に言えば、dashboard
フォルダ外のpage.tsx
には共有されません。
import SideNav from '@/app/ui/dashboard/sidenav'
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<div className="flex h-screen flex-col md:flex-row md:overflow-hidden">
<div className="w-full flex-none md:w-64">
<SideNav />
</div>
<div className="flex-grow p-6 md:overflow-y-auto md:p-12">
{children}
</div>
</div>
)
}
- /dashboard
- /dashboard/customers
- /dashboard/invoices
この3つのページでは、サイドバー
を共通して表示したいので、layout.tsx
に<SideNav />
という記述をしています。
また、{children}
の中にそれぞれのページのレイアウトが入るといった感じです。
分かりづらいですが、下の画像のように、ページは違えど、サイドバー
は共通して表示されていることが分かりますね。
そして、layout.tsx
を使う利点はもう一つあります。
それは、page.tsx
が更新されても、再レンダリング
が起こらないことです。
これを部分レンダリング
といいます。
下の画像のように、dashboard/setting
から/dashboard/analytics
に移動しても、dashboard/layout.js
は共通であるため、layout.js
に対しては再レンダリング
が起こりません。
おわりに
なかなか面白くなってきましたね。
次の記事