У меня есть следующий класс маршрутизатора:
function Routes() {
return (
<BrowserRouter>
<div className="App">
<Switch>
<Route path="/login" exact component={Login} />
<Route path="/SignUp" exact component={SignUp} />
<Route path="/ForgotPassword" exact component={ForgotPassword} />
<Route path="/ChangePassword" exact component={ChangePassword} />
<Authenticated>
<Switch>
<Route path="/startTest" exact component={StartTest} />
</Switch>
</Authenticated>
<Authenticated>
<Header />
<Shell>
<Switch>
<Route path="/TestResult" exact component={TestResult} />
<Route path="/TestList" exact component={TestList} />
<Route path="/Home" exact component={Home} />
<Route path="/" exact component={Home} />
<Route component={GenericNotFound} />
</Switch>
</Shell>
<Footer />
</Authenticated>
<Route component={GenericNotFound} />
</Switch>
</div>
</BrowserRouter>
);
}
Аутентификация. js
function Authenticated({ children }) {
const history = useHistory();
if (!IsLoggedIn()) {
history.push(`/login`);
}
if (IsLoggedIn()) {
return <>{children}</>;
} else {
return <></>;
}
}
Как видите, есть два тега Authenticated
Я использовал.
На основе страницы, например, если путь "/startTest"
и пользователь вошел в систему, я не хочу загружать верхний / нижний колонтитул.
Но в других случаях, например, если пользователь на странице "Home"
, я хочу загрузить компонент Header/Footer
.
Когда я пытаюсь просмотреть страницы Home/TestResult/TestList
, он ничего не загружает. Если я удаляю один Authenticated
компонентный тег из HTML, он работает нормально.