Next.js 読解メモ 04: 検索パラメータとURL操作(SSRを避ける)
· 2 min read
要点(最短)
- SSRを避けるなら、サーバーで
searchParamsを読まない。
クライアントでuseSearchParams()を使う。 - URL更新は
useRouter().push/replace。履歴を汚したくなければreplace。
最小スニペット:読む
"use client";
import { useSearchParams } from "next/navigation";
export default function View() {
const sp = useSearchParams();
const q = sp.get("q") ?? "";
return <div>query: {q}</div>;
}
最小スニペット:書く(履歴を汚さない)
"use client";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
export default function SearchBox() {
const router = useRouter();
const pathname = usePathname();
const sp = useSearchParams();
function setQ(q: string) {
const next = new URLSearchParams(sp); // 既存クエリを引き継ぐ
q ? next.set("q", q) : next.delete("q");
router.replace(`${pathname}?${next.toString()}`, { scroll: false });
}
return <input onChange={(e)=>setQ(e.target.value)} placeholder="search..." />;
}
小技
- 入力連打には debounce(例:300ms)。
- 戻る/進むの履歴を残したい検索UI →
push、残したくない微細操作 →replace。 - クエリは UI状態の単一ソースにもできる(刷新や共有に強い)。
クイックチェック
- 「サーバーの Page 引数で
searchParamsを読む」と挙動は? → SSR になる。
次でラストです(**05: 外部API・秘匿情報・API Route最小プロキシ**)。