Я согласен, что решение с компонентом высокого порядка, вот еще один пример, чтобы не задавать вопросы на каждом маршруте и иметь более общий способ сделать страницу приватной
У вас есть компонент-обертка: withAuthorization
, который оборачивает ваш компонент, чтобы проверить, есть ли у вас доступ к этому содержимому или нет.
Это всего лишь быстрый пример, надеюсь, он вам поможет
const withAuthorization = Component => {
return class WithAuthorization extends React.Component {
constructor(props){
super(props);
this.state = {
auth: false
}
}
async componentDidMount() {
// ask in your api for the authorization
// if user has authorization
this.setState({ auth: true })
}
render () {
const { auth } = this.state;
return (
{auth ? <Component {...this.props} /> : <Redirect to={`login`} />}
)
}
}
}
export default withAuthorization;
Тогда, когда вы экспортируете свои компоненты, просто нужно сделать это следующим образом:
withAuthorization(ComponentToExport)