【Everyday Next.js】6. Routing Detail
Routing
ページごとに page.tsx が必要
例えば、以下のようなディレクトリ構造だと、
app ├ layout.tsx └ page.tsx ├ about │ └ page.tsx └ user ├ page.tsx └ post └ page.tsx
- app/page.tsx -> /
- app/about/page.tsx -> /about
- app/user/page.tsx -> /user
- app/user/post/page.tsx -> /user/post
となる。
Pages Router のように、
のようなファイルを作っても対象にならないので注意。
Root Layout は必須
app ディレクトリ直下のlayout.tsx
は必須。
そして、以下のファイルのように、<html>
タグと<body>
タグを含む必要がある。
// app/layout.tsx export default function RootLayout({ children, }: { children: React.ReactNode }) { return ( <html lang="en"> <body>{children}</body> </html> ) }
この Root Layout は、Pages Router の\app.tsx
や\document.tsx
にあたるもののようだ。
Rayout と Template
Rayout も Template も、どちらもページをラップするものである。
2つの違いは、「画面遷移したときに再レンダリングが行われるかどうか」。
Rayout は再レンダリングが行われず、Template は再レンダリングが行われる。
使い分け基準は以下の技術記事がわかりやすい。
<head>
の編集
タイトルやメタデータなどの<head>
要素は、layout.tsx や page.tsx で metadata オブジェクトや generateMetadata 関数をエクスポートすることで定義できる。
// app/page.tsx import {Metadata} from 'next'; export const metadata: Metadata = { title: 'Next.js', }; export default function Page() { return '...'; }
逆に、自分で Root Layout に<head>
タグを追加すべきではない。上記のような Metadata API を使うようにすること。
おわりに
今日は、App Router での Routing についてもう少し詳細な仕様を見た。 明日は、Linking や Navigating を見ていく。