#1.はじめに
Next.jsを使い始めると「画面遷移処理ってどうするん?」って思って手が止まる人が多いのではないでしょうか?
なのでこの記事はNextの画面遷移がしっかり扱えるようにまとめておきました。
#2.なぜNext.jsで画面遷移を設定するのか?
まず初めにNextでなぜ画面遷移を設定するのでしょうか?
別に「aタグで記述しておけば、画面遷移するでしょう!」って考える人もいると思いますが実は違いがあるのです。
aタグはHTMLファイルを取得して全画面を表示していますが、Nextは前の画面と比較して異なる部分だけを入れ替えています。
そのため、Nextの画面遷移のほうが軽く、動きが滑らかに感じます。
#3.Next.jsで画面遷移する方法
それでは具体的にNextで画面遷移する方法を見ていきましょう!
Nextで画面遷移する方法は2種類あります。
- Linkコンポーネントを使う
- Router.pushを使う
Linkコンポーネント
はJSXでHTMLのように記述する方法でRouter.push
はイベントハンドラーなどの処理の中で設定する方法です。
JSXを使うかどうかで使い分けることができ、JSXを使う場合はLinkコンポーネント
、イベントハンドラの場合はRouter.push
を使います。
- JSXの場合:Linkコンポーネント
- イベントハンドラの場合:Router.push
##3-1.Linkコンポーネント
Linkコンポーネントはaタグをラップすることで使うことができ、特徴はJSXでタグとして扱えることです。
Linkコンポーネントは2ステップで実装できます。
- Linkコンポーネントのインポート
- Linkコンポーネントでaタグを包む
次のソースは、/
から/NextPage
に遷移する方法です
//①Linkコンポーネントのインポート
import Link from "next/link";
export default function Index() (
<div style={{textAlign: "center"}}>
<h1>遷移元</h1>
{/* ②Linkコンポーネントでaタグを包む */}
<Link href="/NextPage">
<a>次のページへ進む</a>
</Link>
</div>
);
①でLinkコンポーネントを使うために必要なモジュールを取り込み、②でaタグをLinkコンポーネントでラップして遷移先を設定するだけの処理です。
この2ステップでNextでの画面遷移を実装できます。
ちなみにリンクにCSSクラスなどのオプションを設定する場合はaタグに設定します。
例えば、別のタブで画面を開きたいときはtaget
属性をaタグに設定します。
<Link href="/NextPage">
<a target="_blank">新しいページを開く</a>
</Link>
##3-2.Router.push
次はRouter.pushで遷移する方法です。
Router.pushは処理の中に埋め込めるので柔軟なページ遷移が可能です。
イベントハンドラなどに実装できるのが特徴で、Router.pushでの実装も2ステップで設定できます。
- Routerオブジェクトのインポート
- 遷移先の設定
次のソースは/NextPage
から/
に遷移するプログラムです。
//①Routerオブジェクトのインポート
import Router from 'next/router'
export default function NextPage() {
function clickHandler() {
//②遷移先の設定
Router.push('/')
return
}
return (
<div style={{textAlign: "center"}}>
<h1>遷移先</h1>
<button onClick={clickHandler}>前のページへ戻る</button>
</div>
);
}
①でRouterオブジェクトをインポートして、②のpushメソッドで遷移するパスを設定しています。
Next.jsのindex.jsは特殊なページで/index
でなくて/
でも遷移できます。
また、Pagesフォルダーを基準にパスを設定するので今回の場合だとpagesフォルダーの直下にあるindex.jsファイルのコンポーネントに遷移しています。
#4.まとめ
この記事ではNextで画面遷移する方法を2種類解説しました
・JSXでの画面遷移はLinkコンポーネント
・イベントハンドラーでの画面遷移はRouter.push
画面遷移はNext.jsでもよく使う機能なので覚えていて損はないです。
#5.参考文献
Next.js公式サイト