#javascript #reactjs #react-router
#javascript #reactjs #реагировать-маршрутизатор
Вопрос:
Я регистрирую пользователя перед отображением страницы, но если пользователь заблокирован и обновляет страницу, он перенаправит на главную страницу.
Это мое первое перенаправление:
useEffect(() => {
dispatch({type: USER_LOGIN})
}, [])
<PrivateRoute path={'/profile/:slug'} redirect={'/'} loggedIn={isLogged} component={Profile} />
const PrivateRoute = ({ component: Comp, loggedIn, redirect, path, ...rest }) => {
return (
<Route
path={path}
{...rest}
render={props => {
return loggedIn ? <Comp {...props} /> : <Redirect to={redirect} />
}}
/>
)
}
И вторая попытка:
<Route path={'/profile/:slug'}>
{
isLogged ? <Route path={'/profile/:slug'} component={Profile} /> : <Redirect to={'/'} />
}
</Route>
Но все мои попытки были ошибочными, и если я обновлю страницу повторно, я был перенаправлен на главную страницу
Комментарии:
1. Вероятно, у вас должно быть состояние «загрузка», чтобы условно отображать что-то другое , кроме вашего аутентифицированного компонента маршрута или перенаправления. Т.Е. дождитесь завершения проверки подлинности, прежде чем предпринимать какие-либо действия тем или иным способом.
Ответ №1:
Просто добавьте на странице профиля этот код на странице профиля
useEffect(() => {
window.axios.post(`auth/user`)
.then(res => {
dispatch({type: USER_LOGIN, payload: res.data.data})
})
.catch(() => {
history.push(`/`)
})
}, [])