1最小の Link
Link の一番基本的な形で、href に移動先のパスを渡すだけです。見た目も書き味も a タグとほぼ同じですが、ページ全体のリロードなしで移動できる点だけが違います。
import Link from "next/link";
export default function HomePage() {
return (
<main>
<h1>ホーム</h1>
<Link href="/about">会社概要を見る</Link>
</main>
);
}
// a タグとの違いはこの1点:
// ページ全体を読み込み直さず、必要な部分だけ差し替えて移動する。
2ナビゲーションバーを作る
Link を並べてサイト内の主要ページへの導線を作る、最も出番の多い使い方です。画面に表示された Link は移動先が自動で先読みされるので、ナビからの移動は体感ほぼ一瞬になります。
import Link from "next/link";
export default function GlobalNav() {
return (
<nav>
<Link href="/">ホーム</Link>
<Link href="/products">商品一覧</Link>
<Link href="/news">お知らせ</Link>
<Link href="/contact">お問い合わせ</Link>
</nav>
);
}
// 画面に見えている Link は移動先を裏で先読みしてくれる。
3内部は Link・外部は a タグ
リンク先がサイト内か外部かで使い分ける基準を、1つのコンポーネントの中で対比した例です。サイト内に a タグを使うとリロードが発生して遅くなる、というレッスン本文の注意点がコードの形で分かります。
import Link from "next/link";
export default function SiteFooter() {
return (
<footer>
{/* サイト内 → Link(リロードなしで速い) */}
<Link href="/privacy">プライバシーポリシー</Link>
<Link href="/terms">利用規約</Link>
{/* 外部サイト → 普通の a タグでよい */}
<a href="https://twitter.com/mysite">公式 X</a>
<a href="https://github.com/mysite">GitHub</a>
</footer>
);
}
4内部リンクかどうかを判定してみる
「/ で始まるパスはサイト内、http で始まる URL は外部」という使い分けの基準を、判定関数として実行できる形にした例です。実務でも CMS から来たリンク一覧を Link と a に振り分けるときに、この判定がそのまま登場します。
TypeScript
5レイアウトにグローバルナビを組み込む
前のレッスンの layout.tsx と Link を組み合わせ、全ページ共通のナビゲーションを完成させる実務的な例です。共通の枠はレイアウトに、移動は Link に、と役割を分担するのが Next.js のサイトの基本骨格になります。
// app/layout.tsx — 全ページにナビ付きヘッダーを共有
import Link from "next/link";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="ja">
<body>
<header>
<Link href="/">ホーム</Link>
<Link href="/products">商品一覧</Link>
<Link href="/cart">カート</Link>
</header>
{children}
</body>
</html>
);
}