TL;DR

クエリパラメータで状態を管理するライブラリ。Client Component と Server Component の両方に対応している。

仕組み

公式サイトでは「React 向けの型安全な検索パラメータの状態管理ライブラリ」と紹介されている。React の useState に似た API で、状態を URL と同期させる。よく使う型のパーサとシリアライザが組み込まれていて、自分で作ることもできる。複数のキーは useQueryStates でまとめて扱える。

更新はデフォルトでクライアントだけの浅い更新になり、必要なときだけサーバに通知して Server Component を描画し直せる。履歴を置き換えるか積むかも選べるので、積む設定にすればブラウザの戻るボタンで状態の変化をたどれる。

nuqs 2 は、Next.js 14.2.0 以降(App Router と Pages Router)、React の SPA、Remix、React Router、TanStack Router に対応している。

例

Client Component で使う例。

"use client"
 
import { parseAsInteger, useQueryState } from "nuqs"
 
export function Demo() {
  const [hello, setHello] = useQueryState("hello", { defaultValue: "" })
  const [count, setCount] = useQueryState("count", parseAsInteger.withDefault(0))
  return (
    <>
      <button onClick={() => setCount((c) => c + 1)}>Count: {count}</button>
      <input
        value={hello}
        placeholder="Enter your name"
        onChange={(e) => setHello(e.target.value || null)}
      />
      <p>Hello, {hello || "anonymous visitor"}!</p>
    </>
  )
}

関連

出典