1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.jsの内部リンクと外部リンクの使い分け

1
Posted at

初めに

Next.js でページ遷移を行う方法は主に以下です

  • Link コンポーネント
  • router.push(useRouter)
  • a タグ

それぞれ役割が異なるため、「手段は複数あるけど、どれを使えばいいの?」とならないように使い分けを整理します。

最初に結論

やりたいこと 最適手段 理由
内部ページへ通常のリンク遷移 Link 高速遷移 + prefetch + キャッシュされる
イベント後(処理後)に内部遷移したい router.push JS ロジック内で遷移できる
外部リンクに遷移したい a タグ Link の最適化が効かない / セキュリティ対応しやすい
PDF ダウンロード / mailto / tel を使いたい a タグ ブラウザ標準の動作が必要

Link

Next.jsでアプリケーション内のリンクを作りたい時は最初に Link を使うべき

import Link from "next/link";

<Link href="/dashboard">Dashboard</Link>;

使いどころ

アプリケーション内のページ遷移

詳細

  • ページ内を高速で移動できる(SPAの切り替えみたいなイメージ)
  • Props(prefetch)を指定するとが事前に次のページを読み込める
  • Next.js側がよしなに色々やってくれる(ページのキャッシュなど)

router.push

「クリックしたら即遷移」ではなく
“何か処理をした後に遷移” させたい場面では router.push を使う

"use client";

import { useRouter } from "next/navigation";

const router = useRouter();

router.push("/dashboard");

使いどころ

アプリケーション内のページ遷移

詳細

  • ボタンクリックした時などイベントハンドラ内での遷移ができる
  • ロジック内で遷移したい時に使う

a タグ

外部サイトへ遷移するときは a タグを使う。

<a href="https://example.com" target="_blank" rel="noopener noreferrer">
  Example
</a>

使いどころ

外部へのページ遷移

詳細

  • html標準の機能
  • 自分のアプリからTwitterへのリンクなど外部サイトへのリンクで使う
  • PDFやCSVなどのダウンロード機能を作る時にも使える
  • target="_blank"を指定すれば別タブで開くことができる

まとめ

  • 内部リンク
    • Link
    • router.push(ロジック内で遷移したい時)
  • 外部リンク
    • aタグ

と覚えましょうwindow.location.hrefでも遷移はできますが、ブラウザでポップアップブロックの設定が有効になってると弾かれて表示できないパターンがあるのであんまり使わない方がいいかも。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?