react-router-dom中路径参数名冲突时useParams的取值规则
同名路径参数冲突的取值结果
当路由路径定义为home/user/:id/friends/:id时,组件内通过useParams()解构获取的id,对应路径中位置更靠后的friends/:id段的参数值。
举个实际例子:如果访问的路径是home/user/1001/friends/2002,最终拿到的id值是字符串"2002",前面user段的参数值"1001"会直接丢失。
react-router-dom 对同名参数的处理逻辑
- 路由匹配阶段,解析路径参数的顺序是从左到右遍历路径段,每匹配到一个路径参数,就会把键值对写入存储参数的params对象中。
- 如果遇到和已有键重名的参数,会直接用新匹配到的值覆盖之前存储的同名字段值,默认不会做重名校验、值合并之类的特殊处理。
- 整个路径解析完成后,params对象中每个参数名只会保留最后一次(也就是路径最右侧位置)匹配到的值,前面所有同名参数的值都会被覆盖,无法通过
useParams()读取。
开发提示:实际项目中不要在同一条路由路径里定义同名路径参数,会导致前置段的参数值无法获取。不同位置的参数应该使用区分度的命名,比如将上述路径改为
home/user/:userId/friends/:friendId,就可以通过useParams()同时拿到两个段的参数值。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

