Next.jsは、ページ全体をリロードするよりも高速なクライアント側ナビゲーションを提供します。新しいページのデータ/コンポーネントだけをフェッチして交換し、共有レイアウトはマウントされたままになります。
Link コンポーネント(宣言的)
tsx
;
() {
(
);
}
<Link> は <a> をレンダリングしますが、クライアント側ナビゲーション用にクリックをインターセプトします。重要な点として、リンクがビューポートに入ると、リンク先ルートをプリフェッチするため、ナビゲーションが瞬時に感じられます。
"use client"; // useRouter needs a Client Component
import { useRouter } from "next/navigation"; // note: next/navigation in App Router
export default function LoginForm() {
const router = useRouter();
async function onSubmit() {
await login();
router.push("/dashboard"); // navigate after an action
// router.replace("/x") — no history entry
// router.back() — go back
// router.refresh() — re-fetch server data for the current route
}
}
ナビゲーションがロジックに応じて発生する必要がある場合(フォーム送信後、ログイン後など)、リンク上のクリックではなく useRouter を使用します。
<Link> はクリック前にルートをプリロードします。App Router では、フック は next/navigation (useRouter, usePathname, useSearchParams) から来ます — 古い next/router からではありません(それは Pages Router のみです)。混同するのはよくあるエラーです。
<Link>(自動プリフェッチ付き)と useRouter は、Next.jsが知られている高速でSPA風のナビゲーションを構築する方法です。
プレーンな <a href>(フルリロードを強制します)の代わりに使用することで、アプリを速く保ち、レイアウト状態を保存できます。