Я использую React-router и затем условное, чтобы сделать это. Если бы у меня была переменная isAuthenticated, установленная в true или false, переданная в props, она выглядела бы так:
let routes = (//unauthenticated routes
<Switch>
<Route path = "/auth" component = {Auth} />
<Redirect to = "/auth" />
</Switch>
)
if(props.isAuthenticated){ //authenticated routes
routes = (
<Switch>
<Route path = "/manager" component = {DataManager} />
<Route path = "/logout" component = {Logout} />
<Redirect to = "/visualiser" />
</Switch>
)
}
Обновление на основе комментариев:
Затем в компоненте auth создайтепеременная, которая устанавливает переменную authRediect и затем отображает ее в вашем JSX. Примерно так:
// This sets up a <Redirect> component so that if the state isAuthenticated is true it will not show the /auth page and isntead will redirect to the desired component:
let authRedirect = null;
if (props.isAuthenticated) {
authRedirect = <Redirect to = "/visualiser" />
};
...
return(
<React.Fragment>
{/*The line below performs an auth redirect if the user is authenticated*/}
{authRedirect}
<h1>Welcome </h1>
</React.Fragment>
);
Таким образом, вы просто возвращаете переменную authRedirect в зависимости от того, установлено ли ваше состояние в состояние с проверкой подлинности или нет.