🐷
基礎から始めるNext.js【6Dynamic Routes】
基礎から始めるNext.js【6Dynamic Routes】
YouTube: https://youtu.be/476oNgpi270
今回は「Dynamic Routes」の解説になります。
こちらは「react-router-dom」を使用した際には
「"posts/:id"」のように「id」の部分を
パラメータとして取得することができました。
Next.jsでは「Dynamic Routes」を使用して、
「id」の部分の取得やページの表示を行います。
Dynamic Routes: https://nextjs.org/docs/routing/dynamic-routes
今回はhelloフォルダの中に「[id].tsx」を作成して実践します。
以下のファイルは動画の途中で「id」を「slug」に変更しています。
pages/hello/[id].tsx
import Head from 'next/head'
import Image from 'next/image'
import Link from 'next/link'
import styles from '../../styles/Home.module.css'
import { useRouter } from 'next/router'
export default function HelloIds() {
const router = useRouter()
const { id } = router.query
return (
<div className={styles.container}>
<Head>
<title>Hello Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>
<main className={styles.main}>
<h1 className={styles.title}>
Welcome to <a href="https://nextjs.org">Id Page: {id}</a>
</h1>
<Link href={'/'}>to Toppage</Link>
</main>
<footer className={styles.footer}>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Powered by{' '}
<span className={styles.logo}>
<Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} />
</span>
</a>
</footer>
</div>
)
}
こちらのファイルの「<Link href={'/hello/1'}>to Hellopage</Link>」を
操作してページ遷移のテストをしています。
pages/index.tsx
import Head from 'next/head'
import Image from 'next/image'
import Link from 'next/link'
import styles from '../styles/Home.module.css'
export default function Home() {
return (
<div className={styles.container}>
<Head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>
<main className={styles.main}>
<h1 className={styles.title}>
Welcome to <a href="https://nextjs.org">Next.js!</a>
</h1>
<Link href={'/hello/1'}>to Hellopage</Link>
</main>
<footer className={styles.footer}>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Powered by{' '}
<span className={styles.logo}>
<Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} />
</span>
</a>
</footer>
</div>
)
}
Discussion