You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:React Router v5转v6写法时使用useParams遇到问题

React Router v5 转 v6:路由参数与Route组件写法修正

问题根源

你的代码有两个核心问题导致无法正常运行:

  • React Router v6 废弃了<Route>的component属性,改用element属性传入组件实例
  • 函数组件中无需再接收match参数,且要确保正确导入并使用useParams

修正后的完整代码

1. 重构DishWithId组件

import { useParams } from 'react-router-dom';

const DishWithId = () => {
  // 直接解构获取路由参数,无需match
  const { dishId } = useParams();
  const parsedId = parseInt(dishId, 10);

  // 用find替代filter[0],更高效且语义化
  const targetDish = DISHES.find(dish => dish.id === parsedId);
  const targetComments = COMMENTS.filter(comment => comment.dishId === parsedId);

  return (
    <DishDetail dish={targetDish} comments={targetComments} />
  );
};

2. 更新Route配置

注意:v6中所有<Route>必须包裹在<Routes>组件内(替代v5的<Switch>)

import { Routes, Route } from 'react-router-dom';

// 路由配置部分
<Routes>
  {/* 用element属性传入组件JSX,而非component */}
  <Route path='/menu/:dishId' element={<DishWithId />} />
  {/* 其他路由规则... */}
</Routes>

额外优化点

  • 解构useParams()的返回值,代码更简洁
  • 使用Array.find()替代filter()[0],避免创建冗余数组,提升性能
  • 提前解析路由参数为数字,避免重复执行parseInt

内容的提问来源于stack exchange,提问作者Jo Classy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:15:31