Reactjs 带重定向的React路由器无限路由循环

Reactjs 带重定向的React路由器无限路由循环,reactjs,google-cloud-firestore,react-router-dom,Reactjs,Google Cloud Firestore,React Router Dom,我有一个授权的路由,不应该让用户在没有登录的情况下访问受保护的路由。 然而,当我在上下文中对用户进行身份验证后使用重定向时,登录和管理之间会出现无限循环。只需将链接始终从login更改为admin 错误 错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。 授权路线 const{user}=useAuthState(); console.log(

我有一个授权的路由,不应该让用户在没有登录的情况下访问受保护的路由。 然而,当我在上下文中对用户进行身份验证后使用重定向时,登录和管理之间会出现无限循环。只需将链接始终从
login
更改为
admin

错误

错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。
授权路线

const{user}=useAuthState();
console.log('user in authorized route',user);
如果(用户){
返回;
}
返回;
登录组件中的重定向

if(未授权){
返回
}
具有上下文的AuthController

export const AuthController=({children}:{children:React.ReactNode})=>{
const[state,dispatch]=useReducer(authReducer{
未授权:错误,
授权:错误,
用户:未定义,
});
useffect(()=>{
firebase.auth().onAuthStateChanged((用户)=>{
调度(授权用户(如有));
})
},[state.isAuthorizing])
if(state.isAuthorizing){
返回
}
返回
{儿童}
}

如果我理解正确,有一个路径需要登录和授权

  • 如果未记录->重定向到ROUTES.LOGIN
  • 如果已记录并具有授权->服务内容
  • 如果它被记录并且没有授权->401
对于第三种情况,您应该返回404NotFound或401Unauthorized响应。按照这种逻辑,不应该有任何循环