reactjs - react router v5 privateroute 登录并刷新页面后进入登录
问题描述
我正在尝试使用反应路由器实现私有路由,当我第一次登录时出现问题,它会进入我想要的特定页面,但是当我刷新页面时,即使它已登录,它也会进入登录页面。
我的路由器代码:
export default function PsyaRouter() {
const auth = useSelector((state) => state.auth);
return (
<Router>
<SnackbarProvider maxSnack={4} hideIconVariant={false}>
<Header>
<CustomSnackbar />
<Switch>
<Route path="/login">
<Login />
</Route>
<Route path="/enterPhone">
<EnterPhone />
</Route>
<Route path="/enterCode">
<EnterCode />
</Route>
<PrivateRoute path="/assessment/create">
<AssessmentForm />
</PrivateRoute>
<PrivateRoute path="/assessment">
<Assessment />
</PrivateRoute>
<Route path="/users">
<Users />
</Route>
<Route path="/groups">
<Groups />
</Route>
<Route path="/not-found">
<NotFound />
</Route>
<Redirect to="/not-found" />
</Switch>
</Header>
</SnackbarProvider>
</Router>
);
}
这是我的私有路由实现:
export default function PrivateRoute({ children, ...rest }) {
const auth = useSelector((state) => state.auth);
// const { last_role_type: userType } = useSelector((state) => state.user);
useEffect(() => {
console.log("router auth obj: ", auth);
}, []); //auth
return (
<Route
{...rest}
render={(props) => {
return auth.isLoggedIn ? (
children
) : (
<Redirect
to={{
pathname: "/enterPhone",
state: { from: props.location },
}}
/>
);
}}
/>
);
}
解决方案
请记住,当您刷新浏览器时,所有 state 和 props 都会被清除为其初始值,就像您键入地址路径并按回车一样。
因此,尽管您提供的代码并未暗示它,但很明显您的 state/prop 值auth.isLoggedIn
已被清除,因此可能false
.
推荐阅读
- php - 未创建 Cookie
- unity3d - Unity 2020.2 Alpha 不支持地形工具?
- python - 多索引json到数据框
- bpf - 如何在 bpftracing 脚本中使用结构
- eclipse - POM SNAPSHOT 的 Maven parent.relativePath 指向新父级而不是旧父级错误
- python - 我可以在循环 JSON 数据时附加到 pandas 数据框吗?
- android-espresso - Android Espresso 没有 NavController 设置错误
- amazon-web-services - AWS SES 从任何地址发送邮件
- asp.net - ASP.NET Core WebApplication IIS Express 错误
- r - 如何使用R中的泊松分布计算每小时到达率?