【发布时间】:2021-04-24 07:02:44
【问题描述】:
我正在使用 react-router v6。我想导航到具有 searchParams 的 URL,但我没有看到开箱即用的方法。 useNavigate 允许我通过传入字符串导航到 URL。 useSearchParams 允许我在当前页面上设置 searchParams。
我可以使用 createSearchParams 生成 searchParams,然后将其转换为字符串并将其附加到 URL 的末尾,并在其间添加 ?,但这似乎是一种 hack。
我希望能够做类似的事情:
const navigate = useNavigate();
// listing?foo=bar
navigate("listing", {
params: {
foo: "bar"
}
});
我的 hacky 解决方法:
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"
});
我是否遗漏了文档中的某些内容?
【问题讨论】:
-
为了让这个对话不那么混乱,在 react-router 中说“参数”是 URI 中的变量,也就是
/:id是params.id,你所说的通常是指作为location.search部分又名query-string。有一个很好的帮助库,对于这些操作来说相当常见,但我不认为 react-router 附带这个字符串/解析实用程序npmjs.com/package/query-string -
由于问题似乎与
react-router-v6有关,您可能需要更新标签 (v4) -
您可以使用来自 (usehooks.com) 的“useRouter”
标签: javascript reactjs react-router react-router-dom