Ошибка 404 - это когда страница не найдена - я думаю, что вы ищете ошибку 401 (что является ошибкой несанкционированного доступа). Сначала отвечу на ваш вопрос; для обработки ошибки 401 в реактивном маршрутизаторе вы обычно используете маршруты по умолчанию:
В более раннем реактивном маршрутизаторе:
<Route path='*' component={NotFoundComponent} />
В более новых реактивных маршрутизаторах (версии 4 и 5) просто поместите route last:
<Route path="/404" component={GenericNotFound} />
<Redirect to="/404" />
Однако это не решит вашу проблему. Что вы хотите сделать, так это показать страницу с ошибкой, если пользователь не вошел в систему. НЕ всякий раз, когда пользователь обращается к несуществующему URL-адресу.
Итак, есть два способа сделать то, что вы хотите. Первый способ - с сервером (так обычно и делают в индустрии). У вас есть три страницы (страница входа. js, ошибка 401. js, главное приложение. js). Сначала сервер отправляет страницу входа. js. Затем, когда пользователь входит в систему, вы отправляете страницу main-app. js. Если пользователь не вошел в систему, но пытается получить доступ к URL-адресу в главном приложении. js, вы отправляете 401-error. js page.
Я понимаю, что это несет много накладных расходов, поэтому вместо этого вы можете сделать это немного более простым, но менее безопасным способом через одностраничное приложение - что, вероятно, вы и собираетесь делать.
Сначала вам нужно поддерживать некоторое состояние о независимо от того, вошел ли пользователь в систему глобально во всем вашем приложении (возможно, с помощью redux). Затем в каждом из ваших компонентов (Home, Profile et c.) Вы должны проверить, вошел ли пользователь в систему, если нет, то перенаправить на страницу 404.
Вы можете используйте history
для программного перенаправления на страницу: Программная навигация с использованием реагирующего маршрутизатора
class Foo extends Component {
componentDidMount() {
if (reduxStore.userIsLoggedIn === false) {
this.props.history.push('/401')
}
}
/** -- snip -- **/
}
/** -- snip -- **/
<Route render={({ history }) =>
<Foo history={history}/>
}/>