我想要将私有路由与react-router-dom v6一起使用,当我尝试应用身份验证条件时。
在 App.js 中
<Route path='/dashboard' element= { <PrivateRoute><Abc /></PrivateRoute>}/>
在组件 .js 中
<Routes> <Route {...rest} render={props => !isAuthenticated && !loading ? (<Navigate to='/login' />) : (<Component {...props} />)} /></Routes>
错误: 只能用作 元素的子元素,不能直接渲染。请将您的内容封装在 中
错误:[Abc] 不是 组件。的所有子组件必须是 或
请帮我解决这种情况吗?或者有什么建议。
尝试过此操作,但在两种情况下均出现上述错误之一
<Route path='/dashboard' element= {<PrivateRoute> <Dashboard />
</PrivateRoute>}/>
Also
`<PrivateRoute path='/dashboard' element= { <Dashboard />}/>`
PIC代码已满 https://i.stack.imgur.com/iKOl2.png
In react-router-dom
版本6没有render
支撑Route
成分。您还可以简化您的PrivateRoute
包装组件一点,它不需要渲染更多Routes
and Route
成分。
有条件地渲染组件的子组件或导航以登录。
const PrivateRoute = ({ auth: { isAuthenticated }, children }) => {
return isAuthenticated ? children : <Navigate to="/login" />;
};
Usage:
<Route
path="/dashboard"
element={
<PrivateRoute>
<Dashboard />
</PrivateRoute>
}
/>
稍微改进的版本允许嵌套更多私有路由组件,利用出口来处理嵌套路由的渲染。
const PrivateWrapper = ({ auth: { isAuthenticated } }) => {
return isAuthenticated ? <Outlet /> : <Navigate to="/login" />;
};
Usage:
<Route element={<PrivateWrapper />}>
<Route path="/dashboard" element={<Dashboard />} />
</Route>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)