Next.js 14 ナビゲーションの利用 (動的ルーティング)
https://〇〇〇.com/1 や https://〇〇〇.com/200のように動的にパラメータの値が変化するようなルーティングを実現する方法をまとめる。
今回は、何かしらの投稿を管理するページがあるとし、投稿一覧内のリンクをクリックすると、各投稿のページに遷移するというような方向でコードを考えてみる
postsフォルダを作成
appフォルダ配下に以下のような構造で作成。
app
- posts
- page.tsx
page.tsxには以下のコードを記述。リンク箇所には、Linkコンポーネントを使用。
import Link from 'next/link'
import React from 'react'
type Props = {}
export default function posts({}: Props) {
return (
<div>
<ul>
<li>
<Link href="/posts/1">投稿1</Link>
</li>
<li>
<Link href="/posts/2">投稿2</Link>
</li>
<li>
<Link href="/posts/3">投稿3 </Link>
</li>
</ul>
</div>
)
}
続いて、"posts/1", "posts/2"のようなURLの示すページを表示させることが出来るように、動的なルーティング用の階層を作成していく。
動的なルーティング用のフォルダを作成
postsフォルダ内を以下のように修正
app
- posts
- [id]
- page.tsx
- page.tsx
[id] のidには、投稿IDである1,2,3などが設定される。
[id]フォルダ内のpage.tsxには、以下のソースを記述する。
import React from 'react'
type Props = {
// パスパラメータの型を設定
params:{
id: number;
}
}
// パスパラメータを取得
export default function page({params}: Props) {
return (
<div>投稿 {params.id} page</div>
)
}
動的なルーティング : 動作の確認
ブラウザで http://localhost:3000/posts へアクセス
以下のように表示されることを確認。
3つのリンクのいずれかを選択。
URLが http://localhost:3000/posts/{id} となっていることに加え、ページの表示内容には、URLの末尾のパスパラメータが反映されていることを確認する。
他のリンクも同様に、正しくアクセスが出来ることを確認する。