React项目升级依赖后<Route>组件报错的解决咨询
解决React Router v6中自定义路由的报错问题
问题根源是React Router v6对路由组件的结构做了强制要求:<Route>必须作为<Routes>的直接子元素,不能在自定义组件里直接渲染<Route>,同时原来的<Redirect>已被<Navigate>替代,自定义权限路由的实现逻辑也需要调整。
具体修改步骤:
重构
NonPrivateRoute组件
不再用<Route>包裹逻辑,改成条件渲染组件,直接返回目标组件或跳转指令:import { Navigate } from 'react-router-dom'; const NonPrivateRoute = ({ children }) => { // 替换成你项目中判断用户是否已登录的逻辑 const isAuthenticated = ...; // 已登录则跳转到dashboard,未登录则渲染传入的子组件 return isAuthenticated ? <Navigate to="/dashboard" replace /> : children; };在App.js的
<Routes>中使用该组件
把NonPrivateRoute作为对应路由的element内容,包裹需要控制权限的页面组件:<Routes> <Route path="/login" element={ <NonPrivateRoute> <Login /> </NonPrivateRoute> } /> <Route path="/dashboard" element={<PrivateRoute><Dashboard /></PrivateRoute>} /> {/* 其他路由配置 */} </Routes>
核心逻辑说明:
React Router v6不再支持v5中通过自定义组件嵌套<Route>的写法,所有路由必须在<Routes>下声明。权限控制逻辑需要转移到路由的element属性中,通过条件渲染组件(比如NonPrivateRoute)来实现页面的访问拦截与跳转。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

