ページとレイアウト
Pages Routerは、ページの概念に基づいたファイルシステムベースのルーターを持っています。
pages
ディレクトリにファイルを追加すると、自動的にルートとして利用可能になります。
Next.jsでは、ページはpages
ディレクトリ内の.js
、.jsx
、.ts
、.tsx
ファイルからエクスポートされるReactコンポーネントです。各ページは、ファイル名に基づいたルートに関連付けられます。
例: pages/about.js
に以下のようなReactコンポーネントを作成すると、/about
でアクセスできます。
ルーターは、index
と名付けられたファイルを自動的にディレクトリのルートにルーティングします。
pages/index.js
→ /
pages/blog/index.js
→ /blog
ルーターはネストされたファイルをサポートしています。ネストされたフォルダ構造を作成すると、ファイルは同様に自動的にルーティングされます。
pages/blog/first-post.js
→ /blog/first-post
pages/dashboard/settings/username.js
→ /dashboard/settings/username
Next.jsは動的ルートのページをサポートしています。例えば、pages/posts/[id].js
というファイルを作成すると、posts/1
、posts/2
などでアクセスできます。
動的ルーティングの詳細については、動的ルーティングのドキュメントを確認してください。
Reactモデルでは、ページをコンポーネントのシリーズに分解できます。これらのコンポーネントの多くは、ページ間で再利用されることがよくあります。例えば、すべてのページで同じナビゲーションバーとフッターを持つことがあります。
アプリケーション全体で1つのレイアウトしか使用しない場合、カスタムAppを作成し、レイアウトでアプリケーションをラップできます。<Layout />
コンポーネントはページ遷移時に再利用されるため、そのコンポーネントの状態が保持されます(例:入力値)。
複数のレイアウトが必要な場合、ページにgetLayout
プロパティを追加して、レイアウトのReactコンポーネントを返すことができます。これにより、_ページごとに_レイアウトを定義できます。関数を返すため、必要に応じて複雑にネストされたレイアウトを作成できます。
ページ間を移動する際、シングルページアプリケーション(SPA)の体験のために、ページの状態(入力値、スクロール位置など)を_保持_したいと思います。
このレイアウトパターンでは、ページ遷移間でReactコンポーネントツリーが維持されるため、状態の持続が可能になります。コンポーネントツリーにより、Reactは状態を保持する要素を理解できます。
補足: このプロセスは調停と呼ばれ、Reactが変更された要素を理解する方法です。
TypeScriptを使用する場合、最初にgetLayout
関数を含む新しいページ用の型を作成する必要があります。次に、以前に作成した型を使用してComponent
プロパティをオーバーライドする、新しいAppProps
用の型を作成する必要があります。
レイアウト内では、useEffect
またはSWRのようなライブラリを使用してクライアント側でデータをフェッチできます。このファイルはページではないため、現在getStaticProps
やgetServerSideProps
を使用することはできません。