在React Router v6升级后,路由参数处理成为开发中的重要环节。v6版本移除了<Switch>组件,改为使用Routes组件,并且路由参数获取方式有所变化。
问题场景
在v6中,通过useParams()钩子获取路由参数时,发现参数无法正确解析,特别是在嵌套路由场景下。
解决方案
// v5写法 (已废弃)
const { params } = this.props.match;
// v6写法
import { useParams } from 'react-router-dom';
function UserProfile() {
const params = useParams();
console.log(params.userId); // 正确获取参数
return <div>User Profile</div>;
}
// 嵌套路由处理
function UserLayout() {
const { userId } = useParams();
return (
<div>
<h2>User: {userId}</h2>
<Routes>
<Route path="profile" element={<UserProfile />} />
<Route path="settings" element={<UserSettings />} />
</Routes>
</div>
);
}
性能优化要点
- 避免在组件中重复解析参数
- 使用
useMemo缓存参数计算结果 - 合理使用
useLocation和useNavigate提高路由控制效率
复现步骤
- 创建v6项目并安装react-router-dom@6
- 配置基础路由结构
- 在子组件中使用
useParams() - 测试不同路径参数获取是否正确
- 优化参数处理逻辑,确保性能稳定

讨论