Существует компонент, который обнаруживает браузер и возвращает сообщение о неподдерживаемом браузере или возвращает перенаправление. Ниже приведена часть кода этого компонента:
detectIE() {
const ua = window.navigator.userAgent;
const msie = ua.indexOf('MSIE ');
console.log(msie);
if (msie > 0) {
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
return false;
}
render() {
if (this.detectIE()) {
return (
<FullPageError
title={''}
image={<BntIconWrapper icon={<SvgPageErrorGeneric />} defaultColor={true} />}
explanation={''}
userOptions={''}
></FullPageError>
);
}
return <Redirect to="/login" />;
}
Этот компонент (<Route component={checkBrowser} />
) отображается в компоненте root следующим образом:
<Switch>
<Route component={checkBrowser} />
<Route exact path="/login" component={checkLogin} />
<Route exact path="/signin-oidc" component={checkSignInOidc} />
<Route path="/error-page" component={ErrorPageContainer} />
<Route path="/authorizeExternal" component={AuthorizeExternal} />
<Route path="/" component={checkDarklyProjects} />
<Route path="**" component={NotFound} />
</Switch>
Суть проблемы заключается в том, что когда detectIE()
возвращает false и компонент возвращает <Redirect to="/login" />
, происходит зацикливание. Я думаю, что цикл происходит потому, что в <Route component={checkBrowser} />
свойство path
отсутствует. Но это сделано для того, чтобы компонент отвечал на любой URL. Как визуализировать другие элементы управления после проверки браузера?