リンクとナビゲーション
Next.jsのルーターにより、シングルページアプリケーションと同様に、ページ間のクライアントサイドルート遷移を行うことができます。
クライアントサイドのルート遷移を行うために、Link
と呼ばれるReactコンポーネントが提供されています。
上の例では、複数のリンクを使用しています。それぞれのリンクは、既知のページへのパス(href
)をマッピングしています:
/
→pages/index.js
/about
→pages/about.js
/blog/hello-world
→pages/blog/[slug].js
ビューポート内の任意の<Link />
(最初または下にスクロールして)は、静的生成を使用するページのためにデフォルトでプリフェッチされます(対応するデータを含む)。サーバーレンダリングされたルートの対応するデータは、<Link />
がクリックされた時のみ取得されます。
動的パスへのリンク
また、補間を使用してパスを作成することもできます。これは動的ルートセグメントで便利です。例えば、コンポーネントにプロップとして渡された投稿のリストを表示する場合:
この例では、パスをUTF-8互換にするために
encodeURIComponent
を使用しています。
または、URLオブジェクトを使用する方法:
今回は、補間を使用してパスを作成する代わりに、href
内のURLオブジェクトを使用しています:
pathname
はpages
ディレクトリ内のページ名です。この場合は/blog/[slug]
。query
は動的セグメントを持つオブジェクトです。この場合はslug
。
ルーターの注入
例
Reactコンポーネント内で router
オブジェクトにアクセスするには、useRouter
またはwithRouter
を使用できます。
一般的に、useRouter
の使用をお勧めします。
命令的ルーティング
next/link
がほとんどのルーティングニーズをカバーできますが、クライアントサイドのナビゲーションを追加で行うこともできます。next/router
のドキュメントを確認してください。
以下の例は、useRouter
を使用した基本的なページナビゲーションを示しています:
シャローRouting
シャローRoutingを使用すると、データ取得メソッドを再実行せずにURLを変更できます。これにはgetServerSideProps
、getStaticProps
、getInitialProps
が含まれます。
router
オブジェクト(useRouter
またはwithRouter
によって追加)を介して、状態を失うことなく、更新されたpathname
とquery
を受け取ります。
シャローRoutingを有効にするには、shallow
オプションをtrue
に設定します。以下の例を考えてみましょう:
URLは/?counter=10
に更新され、ページは置き換えられず、ルートの状態のみが変更されます。
また、以下のようにcomponentDidUpdate
を介してURLの変更を監視することもできます:
注意点
シャローRoutingは、現在のページのURL変更に対してのみ機能します。例えば、pages/about.js
という別のページがあり、次のコードを実行するとします:
これは新しいページであるため、現在のページをアンロードし、新しいページをロードし、シャローRoutingを要求したにもかかわらず、データ取得を待機します。
ミドルウェアでシャローRoutingを使用する場合、以前のミドルウェアなしの動作とは異なり、新しいページが現在のページと一致することを保証できません。これは、ミドルウェアが動的に書き換えることができ、シャローによりスキップされるデータ取得なしではクライアントサイドで検証できないためです。したがって、シャローなルート変更は常にシャローとして扱う必要があります。