サイトロゴ
ほみのキャラ画像
Web制作
当サイトは広告を含んでいます。おすすめの商品や、おいしかったものを紹介しています。
別途タイトルなどで【PR】のように明記されていない場合、記事の本題は広告とは関係ありません。
詳細は「プライバーポリシー#広告について」をご覧ください。

ひよっこはnext/routerに枕を濡らす

記事のヘッダー画像/>
                            </div>
                            
                        </section>
                        <section class=

目次

はじめに

今回は Next.js を始めた直後にぶつかった話です。

公式の解説ページにすぐに飛べたので、解決はすぐにしましたがちょっとわなですよね、というお話です。

なにがどうした?

🐤「まずは試しにボタンを押したらページ遷移するようにするぞ!」

🐤「なるほど、useRouter()ってやつでpush()したらいいんだな!」

"use client";

import { useRouter } from "next/router";

export default function Page() {
    const router = useRouter();

    return (
        <button type="button" onClick={() => router.push("/")}>
            画面遷移
        </button>
    );
}
TypeScript

🐤「さあ、確認するぞ、ぽちー」

invariant expected app router to be mounted
Plain text

🐤「……???」

おわかりいただけたでしょうか……。

公式のuseRouterのサンプルコードを改めてみて見ましょう。

useRouter

"use client";

import { useRouter } from "next/navigation";

export default function Page() {
    const router = useRouter();

    return (
        <button type="button" onClick={() => router.push("/dashboard")}>
            Dashboard
        </button>
    );
}
TypeScript

概ね流れは同じだと思います。
が、import をよく見てみてください。

next/routerではなく、next/navigationを使うのが正しかったのです……!!

エラー文で検索をかけるとすぐに Next.js 公式のページを見つけられました。

NextRouter was not mounted

おわりに

next/routernext/navigationが候補にあったので、next/routerを選んでしまったことによるエラーでした。

🐤「2 個出てきたな……。next/routernext/navigation……useRouterだしnext/routerかな?違ったら分かるし、ぽちー」

🐤「お! エラー出ないしこっちであってたみたい! やったー!」

という流れで完全に術中に陥りました。

VSCode の候補でnext/routerが並ぶと名前が近いのでそっちを選んじゃう、あるあるだと思います!

参考


運営者

ほみのアイコン

ほみ

プログラミングとか
おえかきとか
いろいろするのがすき

サイトについての詳細

ピンの画像

カテゴリ一覧

    【PR】鮭ジャーキー

    鮭とばとはまた違うおいしさで、柔らかくチーズの味が合っていておいしかったです!