Open5

Dynamic Routes

あおけんあおけん

事前に正確なセグメント名がわからず、動的なデータからルートを作成したい場合、
リクエスト時に入力されるか、ビルド時にプリレンダリングされる動的セグメントを使用できる。

あおけんあおけん

Example

例えば、ブログには次のようなルートpages/blog/[slug].jsを含めることができる。
[slug]はブログ記事のダイナミックセグメント。

import { useRouter } from 'next/router'
 
export default function Page() {
  const router = useRouter()
  return <p>Post: {router.query.slug}</p>
}
Route Example URL params
pages/blog/[slug].js /blog/a { slug: 'a' }
pages/blog/[slug].js /blog/b { slug: 'b' }
pages/blog/[slug].js /blog/c { slug: 'c' }
あおけんあおけん

Catch-all Segments

ダイナミックセグメントは、[...segmentName]という括弧の中に省略記号を追加することで、
後続のセグメントをすべてキャッチするように拡張することができる。

例えば、pages/shop/[...slug].jsは/shop/clothesにマッチするが、
/shop/clothes/tops、/shop/clothes/tops/t-shirtsなどにもマッチする。

Route Example URL params
pages/shop/[...slug].js /shop/a { slug: ['a'] }
pages/shop/[...slug].js /shop/a/b { slug: ['a', 'b'] }
pages/shop/[...slug].js /shop/a/b/c { slug: ['a', 'b', 'c'] }
あおけんあおけん

Optional Catch-all Segments

キャッチオールセグメントは、
パラメーターを二重の角括弧で囲む([[...segmentName]])ことで、オプションにすることができる。

例えば、pages/shop/[[...slug]].jsは、
/shop/clothes、/shop/clothes/tops、/shop/clothes/tops/t-shirtsに加えて、/shopにもマッチします。

Route Example URL params
pages/shop/[[...slug]].js /shop { slug: [] }
pages/shop/[[...slug]].js /shop/a { slug: ['a'] }
pages/shop/[[...slug]].js /shop/a/b { slug: ['a', 'b'] }
pages/shop/[[...slug]].js /shop/a/b/c { slug: ['a', 'b', 'c'] }