我正在尝试在React-Router 5.1中使用useParams钩子函数在函数组件中传递多个参数。
然而我遇到了非常奇怪的行为。
我将url粘贴到客户端中。
Url:
http://localhost:3000/onboarding/eventId=5e9a173f9166f800128c04d1&groupId=5e9a173f9166f800128c04dc&userId=5e9a173f9166f800128c04da
路径:
<Route path = '/onboarding/:eventId?/:groupId?/:userId?' exact component = {OnboardingViewController} />
奇怪的事情 #1: 我必须将参数设为可选项,否则浏览器会一直卡住。
我使用所有这些策略来获取它们:
var { eventId, groupId, userId } = useParams();
var { eventId } = useParams();
var { groupId } = useParams();
var { userId } = useParams();
奇怪的事情 #2: 不幸的是,在试图使用这些参数时会发生这种情况:
{userId: undefined, eventId: "eventId=5e9a173f9166f800128c04d1&groupId=5e9a173f9166f800128c04dc&userId=5e9a173f9166f800128c04da", groupId: undefined}
这个钩子只取第一个参数,并将其余的解释为第一个参数的一部分。
奇怪的事情 #3: 自从添加了这个url参数查询后,访问页面加载变得非常缓慢,需要多秒钟的时间。
我做错了什么? 答案:
我做错的地方: 我使用了url/eventId=123。 这是错误的。 你只需要在URL的正确位置提供资源,如url/1/2/3。
正确的:
http://localhost:3000/onboarding/5e9aaf4fc27583001190834e/5e9aaf60c275830011908361/5e9aaf4fc275830011908357
然后您告诉路由器,这些内容将被称为eventId、groupId和userId。
<Route path = '/onboarding/:eventId/:groupId/:userId' exact component = {OnboardingViewController} />
然后你可以使用userPrams()钩子在组件中访问这些参数。
var { eventId, groupId, userId } = useParams();
谢谢大家!
/onboarding/1/2/3/
,那么useParams
的结果将是{ eventId: 1, groupId: 2 userId: 3 }
。 - azium