I'm using react-router v6. I want to navigate to a URL that has searchParams, but I'm not seeing a way to do this out of the box. useNavigate
allows me to navigate to a URL by passing in a string. useSearchParams
allows me to set searchParams on the current page.
I could generate the searchParams using createSearchParams
and then convert it to a string and append it to the end of the URL with a ?
in between, but that seems like a hack.
I'd like to be able to do something like:
const navigate = useNavigate();
// listing?foo=bar
navigate("listing", {
params: {
foo: "bar"
}
});
My hacky workaround:
function useNavigateParams() {
const navigate = useNavigate();
return (url: string, params: Record<string, string | string[]>) => {
const searchParams = createSearchParams(params).toString();
navigate(url + "?" + searchParams);
};
}
const navigateParams = useNavigateParams();
navigateParams("listing", {
foo: "bar"
});
Did I miss something from the documentation?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…