@kunlun-qilian/create-app-cli
Version:
## Scaffolding Your First webapp Project
26 lines (20 loc) • 753 B
text/typescript
import { useRef } from "react";
import { parseQueryString, toQueryString } from "./utils";
import { useLocation, useNavigate } from "react-router-dom";
export type ParsedUrlQueryValue = string | string[];
export interface ParsedUrlQuery {
[key: string]: ParsedUrlQueryValue;
}
export function useQuery<T extends ParsedUrlQuery>() {
const { search } = useLocation();
const navigate = useNavigate();
const queryState = useRef(parseQueryString(search) as T);
const setQuery = (handler: (prevQuery: T) => T) => {
const nextQuery = handler(queryState.current);
queryState.current = nextQuery;
navigate(toQueryString(nextQuery), {
replace: true,
});
};
return [queryState.current, setQuery] as [T, typeof setQuery];
}