Я пишу HOC для общественного маршрута и частного маршрута. Если маршрут является закрытым, и пользователь проходит аутентификацию, то разрешите ему / ей войти на эту страницу, иначе перенаправьте на компонент входа. Если маршрут является общедоступным, и пользователь не аутентифицирован, то покажите страницу, а также покажите страницу входа, если пользователь не аутентифицирован, но пользователь прошел аутентификацию и все еще переходит на страницу входа, а затем перенаправляет пользователя на корневую страницу. Это работает нормально. Но если я использую рендер вместо компонента, то он не работает. Я могу заставить его работать, только если я пропущу компонент из реквизита, называемого компонентом реагирующего маршрутизатора.
Как я могу заставить его работать, если пользователь рендерит реквизит?
Вот мой код
<Switch>
<PrivateRoute
exact
path="/"
render={() => <Home name="something" />} {/* this does not work */}
/>
<PrivateRoute exact path="/demo" component={Demo} />
<PublicRoute restricted={true} path="/auth" component={Authentication} />
</Switch>
PublicRoute.js
const PublicRoute = ({component: Component, restricted, ...rest}) => {
return (
<Route
{...rest}
render={props =>
isLogin() && restricted ? <Redirect to="/" /> : <Component {...props} />
}
/>
)
}
PrivateRoute.js
const PrivateRoute = ({component: Component, ...rest}) => {
return (
<Route
{...rest}
render={props =>
isLogin() ? <Component {...props} /> : <Redirect to="/auth/login" />
}
/>
)
}
Также, если есть какие-то дополнительные улучшения, пожалуйста, предложите мне.