gin*_*boy 7 typescript reactjs react-router-dom
我正在尝试实施受保护的路线,以仅允许登录的用户访问我的应用程序。我编写的代码似乎有效,当我尝试在未登录的情况下访问主页时,我被重定向到我的登录页面,但是一旦我登录,我可以访问该页面,但我不会呈现,并且出现以下错误:点击此处查看错误
我尝试了多种方法,将元素包装在受保护的路由中似乎是 V6 的处理方式,但它似乎对我不起作用:
我的受保护路线
interface PrivateRouteProps extends RouteProps {
}
const PrivateRoute: React.FC<PrivateRouteProps> = ({...rest}) => {
const auth = useAuth();
if (auth?.user === null) {
return <Navigate to='/'/>;
}
return <Route {...rest}/>;
};
export default PrivateRoute;
Run Code Online (Sandbox Code Playgroud)
我的应用程序(路线使用)
function App() {
useEffect(() => {
API
.get('api', '/reservation', {})
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error.response);
});
}, [])
return (
<Router>
<Routes>
<Route path='/' element={<LoginPage />}/>
<Route path='/consultAndReserve' element={<PrivateRoute><Navbar/><ConsultReserve/></PrivateRoute>} />
<Route path='/consultAndReserve/:date' element={<><Navbar/><ConsultReserveWithDate/></>}/>
<Route path='/myReservations' element={<><Navbar/><Reservations/></>}/>
<Route path='/tracing' element={<><Navbar/><Tracing/></>}/>
</Routes>
</Router>
);
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Dre*_*ese 10
即使在 TypeScript 中,创建“PrivateRoute”组件也相当简单。
在您的情况下,您无法直接渲染Route
错误指出的组件。这是 RRDv5 和 RRDv6 之间的重大变化。您可以渲染children
道具,因为您直接包装了要保护的组件。
例子:
const PrivateWrapper = ({ children }: { children: JSX.Element }) => {
const auth = useAuth();
return auth?.user ? children : <Navigate to="/" replace />;
};
Run Code Online (Sandbox Code Playgroud)
用法:
<Routes>
...
<Route
path="/consoleAndReserve"
element={(
<PrivateWrapper>
<Navbar />
<ConsultReserve />
</PrivateWrapper>
)}
/>
...
</Routes>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7946 次 |
最近记录: |