Vize

use-route-query

Built-in QueryParsers.

Package @vizejs/composable/use-route-query
Own the source vize lib pull composable:use-route-query
Runtime exports queryParsers, oneOf, useRouteQuery, useRouteParams
Gzip budget 1536 B

Usage

import { queryParsers, oneOf, useRouteQuery, useRouteParams } from "@vizejs/composable/use-route-query";

Runtime contract

Utility Category Stability SSR Hydration Cleanup Targets Host globals Uses
oneOf state experimental safe stable none web, server, worker, native, desktop, terminal — —
useRouteQuery state experimental safe stable none web, server, worker, native, desktop, terminal — —
useRouteParams state experimental safe stable none web, server, worker, native, desktop, terminal — —

API

queryParsers

Built-in QueryParsers.

const queryParsers

oneOf

Parser accepting only the given literal values.

function oneOf<const Values extends readonly string[]>( values: Values, ): QueryParser<Values[number]>
useRouteQuery(route, "sort", { parse: oneOf(["new", "top"]), default: "new" });

useRouteQuery

Typed, optionally writable view of one query parameter. The value type is inferred from parse and default: with a default the ref never holds undefined. Pass navigate to make the ref writable; writes build the next query (keeping every other key), drop the key when the value equals the default, and hand it to navigate, which is where the router integration pushes or replaces the URL. Works with any route object exposing query, including @vizejs/router's RouteMatch. Pure derived state: SSR-safe and hydration-stable (it reads the matched route only).

function useRouteQuery( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: StringQueryOptions & { readonly default: string; readonly navigate: (query: RouteQueryRecord) => void; }, ): WritableComputedRef<string>
const page = useRouteQuery(match, "page", {
  parse: queryParsers.integer,
  default: 1,
  navigate: (query) => navigateTo(router.resolve(match.value.name, match.value.params, { query })),
});
page.value += 1;

useRouteQuery

function useRouteQuery( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: StringQueryOptions & { readonly navigate: (query: RouteQueryRecord) => void }, ): WritableComputedRef<string | undefined, string | undefined>

useRouteQuery

function useRouteQuery( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: StringQueryOptions & { readonly default: string }, ): ComputedRef<string>

useRouteQuery

function useRouteQuery( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options?: StringQueryOptions, ): ComputedRef<string | undefined>

useRouteQuery

function useRouteQuery<Value>( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: UseRouteQueryOptions<Value> & { readonly default: NoInfer<Value>; readonly navigate: (query: RouteQueryRecord) => void; }, ): WritableComputedRef<Value>

useRouteQuery

function useRouteQuery<Value>( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: UseRouteQueryOptions<Value> & { readonly navigate: (query: RouteQueryRecord) => void }, ): WritableComputedRef<Value | undefined, Value | undefined>

useRouteQuery

function useRouteQuery<Value>( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: UseRouteQueryOptions<Value> & { readonly default: NoInfer<Value> }, ): ComputedRef<Value>

useRouteQuery

function useRouteQuery<Value>( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: UseRouteQueryOptions<Value>, ): ComputedRef<Value | undefined>

useRouteQuery

function useRouteQuery( route: MaybeRefOrGetter<RouteLocationLike>, key: string, options: ErasedQueryOptions = {}, ): ComputedRef<unknown> | WritableComputedRef<unknown>

useRouteParams

Typed view of the matched route's path params. Without a key, returns all params (typed from the route table when the route comes from @vizejs/router). With a key, returns that param; with a parser, the parsed value. Pure derived state: SSR-safe.

function useRouteParams<Route extends RouteLocationLike>( route: MaybeRefOrGetter<Route>, ): ComputedRef<RouteParamsOf<Route>>
const params = useRouteParams(match); // ComputedRef<{ readonly id: string }>
const id = useRouteParams(match, "id", Number); // ComputedRef<number>

useRouteParams

function useRouteParams<Route extends RouteLocationLike, Key extends keyof Route["params"]>( route: MaybeRefOrGetter<Route>, key: Key, ): ComputedRef<Route["params"][Key]>

useRouteParams

function useRouteParams< Route extends RouteLocationLike, Key extends keyof Route["params"], Value, >( route: MaybeRefOrGetter<Route>, key: Key, parse: (raw: Route["params"][Key]) => Value, ): ComputedRef<Value>

useRouteParams

function useRouteParams( route: MaybeRefOrGetter<RouteLocationLike>, ...args: readonly [] | readonly [PropertyKey] | readonly [PropertyKey, (raw: unknown) => unknown] ): ComputedRef<unknown>

Types

RouteLocationLike

Structural subset of a matched route. @vizejs/router's RouteMatch satisfies it, so its inferred params type flows through without this package depending on the router.

Member Type Description
params object Decoded path params.
query RouteQueryRecord Parsed query.

UseRouteQueryOptions

Options for useRouteQuery.

Member Type Description
parse? QueryParser<Value> Converts the raw value.
serialize? QuerySerializer<Value> Converts a written value back into the query.
navigate? (query: RouteQueryRecord) => void Performs the navigation for a write, receiving the complete next query. Without it the returned ref is read-only.
omitDefault? boolean Remove the key instead of writing it when the value equals the default.