Web / TanStack Interview Questions
How do you use URL search params as typed state in TanStack Router?
Declare a validateSearch schema on the route. Search params become typed, validated, URL-persistent state — perfect for filters, sort order, and pagination that must survive refresh and be shareable via URL.
import { createRoute } from "@tanstack/vue-router" import { z } from "zod" export const postsRoute = createRoute({ getParentRoute: ()=>rootRoute, path: "/posts", component: PostsPage, validateSearch: z.object({ page: z.number().int().positive().default(1), status: z.enum(["all","published","draft"]).default("all"), q: z.string().optional(), }).parse, }) // In the component import { useSearch, useNavigate } from "@tanstack/vue-router" const search = useSearch({ from:"/posts" }) // Typed: { page:number, status:"all"|"published"|"draft", q?:string } const navigate = useNavigate() function setPage(n:number){ navigate({ to:"/posts", search: prev=>({...prev, page:n}) }) }
More Related questions...