从v5到v6:React Router部署策略重构踩坑
最近项目组决定将React Router从v5升级到v6,原本以为只是简单的版本升级,结果却踩了不少坑。记录一下这次升级过程中的关键问题和解决方案。
升级前的准备
首先,我们使用npm install react-router-dom@latest进行安装,但很快发现路由组件的API发生了重大变化。v5中使用的<Route>组件现在需要配合useRoutes钩子使用。
核心问题一:路由配置方式改变
v5中可以这样写:
<Route path="/user" component={User} />
v6中必须改为:
<Route path="/user" element={<User />} />
核心问题二:嵌套路由处理
v5中的<Switch>组件在v6中被移除,需要使用useRoutes或Routes替代。我们尝试将所有路由配置重构为数组形式,但发现原本依赖match对象的逻辑全部失效。
核心问题三:导航跳转方式
v5中的this.props.history.push()在v6中不再可用,需要改用useNavigate钩子:
const navigate = useNavigate();
navigate('/target');
实战踩坑记录
升级后发现部分页面加载缓慢,排查发现是<Outlet />组件渲染问题。通过添加key属性解决。同时注意所有路由组件都需要用element属性而不是component属性。
最终经过两天的调试和测试,终于完成升级,建议大家在升级前做好充分的兼容性测试。

讨论