Lal*_*s M 5 reactjs react-hooks
我有一个从UserPage 如下所示的到外部身份验证服务的条件重定向 。条件是这样的,如果我的UserContext不包含用户对象,那么页面将被重定向到 https://urltoauthenticate:5000/user 进行用户身份验证。条件在第一次运行时满足并进入认证服务
但是问题是在成功认证后发生的。在身份验证成功的情况下,即使UserContext提供了用户对象,它在第一次渲染中也会为空。在这里,我如何等待用户对象可用并准备就绪,以便页面不会再次重定向到身份验证服务?
import React, { useEffect, useContext } from 'react';
import { UserContext } from '../context/UserContext';
export default function UserPage () {
const user = useContext(UserContext)
useEffect(() => {
if(user === null{
window.location.assign("https://urltoauthenticate:5000/user");
}
}, [users]);
return(
<div>Hello {user.name}</div>
)
}
Run Code Online (Sandbox Code Playgroud)
小智 1
不要等待上下文更新,而是在用户页面实际更新时重定向到该页面。为此,您可以在登录页面上放置如下组件:
export const RedirectIfLoggedIn: React.FC = () => {
const user = React.useContext(UserContext);
return user ? <Redirect to={userPath} /> : null;
};
Run Code Online (Sandbox Code Playgroud)
此外,将该重定向保护传递给您的路由:
export const PrivateRoute: React.FC<{
component: React.FC;
path: string;
exact: boolean;
}> = (props) => {
const user = useContext(UserContext);
return user ? (
<Route path={props.path} exact={props.exact} component={props.component} />
) : (
<Redirect to={loginPath} />
);
};
Run Code Online (Sandbox Code Playgroud)
export const Routes: React.FC = () => {
return (
<Switch>
<Route path={loginPath} component={LoginPage} />
<PrivateRoute path={userPath} component={UserPage} />
...
</Switch>
);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |