使用 next/router 添加具有相同键的多个查询参数
我正在使用 Next.js 应用程序中的查询参数过滤来自 API 的结果。我想使用 useRouter()
使用相同的密钥推送多个不同的过滤器,因此我的查询参数可能如下所示:
?page=1&skill=html&skill=css&skill=js
我可以将每个参数传递给我的 API 请求。现在,当我尝试添加技能参数时,我使用 router.push 来执行此操作,如下所示:
const router = useRouter();
const addFilter = (skill: string) => router.push({ query: { ...router.query, skill: skill.toLowerCase() } });
但显然它会覆盖以前的技能,因此我只得到一个其中的 URL 中。如何使用相同的键添加其他查询参数,最好使用 useRouter()
或 next/router
?
I'm filtering results from an API utilizing query parameters in my Next.js app. I want to use useRouter()
to push multiple different filters with the same key, so my query params could look like:
?page=1&skill=html&skill=css&skill=js
And I can pass each of those parameters to my API request. Right now, when I'm trying to add a skill parameter I'm using router.push
to do it, like this:
const router = useRouter();
const addFilter = (skill: string) => router.push({ query: { ...router.query, skill: skill.toLowerCase() } });
But obviously it's overwriting the previous skill, so I'm only ever getting one of them in the URL. How can I go about adding additional query parameters with the same key, preferably using useRouter()
or next/router
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为了操作 Next.js 中 URL 中的查询参数,我使用了一个自定义钩子,该钩子使用了 useRouter 提供的功能,但我还添加了一些 util 方法,在本例中,为了向 URL 添加过滤器,我有方法 addParam 。
这是自定义钩子的主体。
这将是挂钩内的 addFilter 方法:
在本例中,我使用
push
将参数添加到 URL,但也可以使用replace
。完整的钩子可以从以下要点复制
To manipulate the query params in the URL in Next.js I use a custom hook that uses what useRouter offers, but I also add some util methods, in this case, to add a filter to the URL I have the method addParam.
This is the body of the custom hook.
And this would be the addFilter method inside the hook:
In this case I use
push
to add the parameters to the URL, butreplace
could also be used.The full hook can be copied from the following Gist
您可以先将技能添加到数组中,而不是发送单个值。然后使用 join() 用分隔符分隔值。
例如:
当然你需要在另一边再次爆炸它..
Instead of sending a single value you can add the skills to an array first. And then use join() to separate the values by a separator.
Ex:
And of course you need to explode it again on the other side..
您可以修改
addFilter
函数,将所需的skill
值作为数组添加到skill
查询参数中。确保对数组项进行重复删除,以避免 URL 中出现重复的过滤器。给定上述函数并假设您的 URL 以
/?page=1
开头,调用addFilter('html')
将使 URL 变为/?page=1& ;技能=html
。以下对addFilter('css')
的调用会将 URL 更新为/?page=1&skill=html&skill=css
。等等。You can modify your
addFilter
function to add the desiredskill
value to theskill
query parameter as an array. Making sure to deduplicate the array items, to avoid having repeated filters in the URL.Given the above function and assuming your URL starts as
/?page=1
, callingaddFilter('html')
would make the URL become/?page=1&skill=html
. A following call toaddFilter('css')
would update the URL to/?page=1&skill=html&skill=css
. And so on.