Next.jsでURLパラメータを受け取る際に初回レンダリングがundefinedになる

公開日時
更新日時

Next.jsのpage内でURLパラメータを受け取ろうとしたところ、初回レンダリング時にパラメータがundefinedになってしまった。

// pages/test.tsx
import { useRouter } from 'next/router'
import React from 'react'

const Test = () => {
  const router = useRouter()
  const { some } = router.query

  console.log(some)

  return <p>hello</p>
}

export default Test

http://localhost:3000/test?some=world にアクセスしてconsoleを確認すると、初回レンダリング時はsomeがundefinedとなり、2回目のレンダリングでworldが出力される。

routerにはisReadyプロパティが用意されており、これを用いることでURLパラメータがundefinedになるレンダリングを回避できた。

import { useRouter } from 'next/router'
import React from 'react'

const Test = () => {
  const router = useRouter()
  const { some } = router.query

  if (!router.isReady) {
    return null
  }
  console.log(some)

  return <p>hello</p>
}

export default Test

参考


Related #next.js

Next.js使用時にrecoil-persistのStorageを変更する

クライアント側で実行された場合のみstorageを指定するようにした

Next.jsで環境に応じて特定のページを非表示にする

NODE_ENVでredirectsを出し分けた

Next.jsで動的URLをRewriteする

next.config.jsにrewritesを追加

Next.js + typescriptでpathsのエイリアスがModule not foundになる

next.config.jsに追記する必要があった

Next.js + Algoliaで全文検索UIを実装する

react-instantsearchを利用