DEV Community

Alex Spinov
Alex Spinov

Posted on

nuqs Has a Free API That Most Developers Dont Know About

nuqs (Next.js URL Query State) is a type-safe search params state manager for Next.js. Like useState, but synced with the URL.

Basic Usage

import { useQueryState } from "nuqs";

function SearchPage() {
  const [search, setSearch] = useQueryState("q");
  const [page, setPage] = useQueryState("page", { defaultValue: "1" });

  return (
    <div>
      <input value={search || ""} onChange={(e) => setSearch(e.target.value)} />
      <p>Page: {page}</p>
      <button onClick={() => setPage(String(Number(page) + 1))}>Next</button>
    </div>
  );
}
// URL: /search?q=react&page=2
Enter fullscreen mode Exit fullscreen mode

Typed Parsers

import { useQueryState, parseAsInteger, parseAsArrayOf, parseAsString } from "nuqs";

const [page, setPage] = useQueryState("page", parseAsInteger.withDefault(1));
const [tags, setTags] = useQueryState("tags", parseAsArrayOf(parseAsString).withDefault([]));
const [sort, setSort] = useQueryState("sort", parseAsString.withDefault("newest"));

// page is number, tags is string[], sort is string
Enter fullscreen mode Exit fullscreen mode

Server-Side (App Router)

import { createSearchParamsCache, parseAsInteger } from "nuqs/server";

const searchParamsCache = createSearchParamsCache({
  page: parseAsInteger.withDefault(1),
  q: parseAsString.withDefault("")
});

export default function Page({ searchParams }) {
  const { page, q } = searchParamsCache.parse(searchParams);
  return <div>Search: {q}, Page: {page}</div>;
}
Enter fullscreen mode Exit fullscreen mode

Key Features

  • Type-safe URL search params
  • Works with App Router and Pages Router
  • Server-side parsing
  • Shallow routing (no re-render)
  • Custom parsers for any type

Need to scrape or monitor web data at scale? Check out my web scraping actors on Apify or email spinov001@gmail.com for custom solutions.

Top comments (0)