В Гэтсби, как бы я ограничил маршруты программно?Используя реагирующий маршрутизатор , я вижу, что можно сделать <Redirect>
с <Route>
, но как это будет реализовано в Гэтсби?Чтобы сделать что-то вроде этого ...
<Route exact path="/" render={() => (
loggedIn ? (
<Redirect to="/dashboard"/>
) : (
<PublicHomePage/>
)
)}/>
Где бы я положил этот файл в Гэтсби?Могу ли я поставить его в src/pages
или в другом месте?
Отредактировано, с просьбой дать дополнительные разъяснения ...
Я могу получить эту работу по совету @Nenu иГэтсби документы.Документы привели не асинхронный пример, поэтому мне пришлось настроить его для взаимодействия с удаленным сервером, как этот ...
async handleSubmit(event) {
event.preventDefault()
await handleLogin(this.state)
.then(response => _this.setState({isLoggedIn: isLoggedIn()}))
.catch(err => { console.log(err) });
}
Кроме того, я могу использовать <PrivateRoute />
с этим.
К сожалению, хотя, когда я рендеринг использую ...
render() {
if (isLoggedIn()) {
return <Redirect to={{ pathname: `/app/profile` }} />
}
return (
<View title="Log In">
<Form
handleUpdate={e => this.handleUpdate(e)}
handleSubmit={e => this.handleSubmit(e)}
/>
</View>
)
}
... в то время как я действительно <Redirect to={{ pathname:
/ app / profile }} />
, я замечаю, что за долю секунды доЯ перенаправляю, поля формы очищаются, и только после этого я перенаправляюсь на /app/profile
(с /app/login
).Кроме того, если я введу неверный пароль, вся моя форма будет перерисована (повторная отрисовка <View />
снова).Это было бы плохо для пользователя, потому что им пришлось бы заново вводить всю свою информацию с нуля, плюс я бы не смог добавить стили для недопустимых вводов и т. Д. Мне интересно, есть ли лучший способчтобы сделать это с Гэтсби.
Или мне нужно было бы создавать функциональность формы с нуля (то есть, используя Redux, Router и т. д. более напрямую), а не зависеть от более высокого уровня абстракции Гэтсби?