Я следую этому учебнику для реализации вложенной маршрутизации.
Вот соответствующий код:
Приложение. js
<PrivateRoute
exact
name="Home"
path="/home"
component={DefaultLayout}
/>
DefaultLayout. js
const Users = React.lazy(() => import("../../views/Users/Users"));
<Route path="/home/users" component={Users} />
PrivateRoute. js
import React from "react";
import { Route, Redirect } from "react-router-dom";
import { connect } from "react-redux";
import PropTypes from "prop-types";
const PrivateRoute = ({ component: Component, auth, ...rest }) => (
<Route
{...rest}
render={props =>
auth.isAuthenticated === true ? (
<Component {...props} />
) : (
<Redirect to="/" />
)
}
/>
);
PrivateRoute.propTypes = {
auth: PropTypes.object.isRequired
};
const mapStateToProps = state => ({
auth: state.auth
});
export default connect(mapStateToProps)(PrivateRoute);
Итак, как вы уже догадались, Я защищаю маршрут / home с помощью компонента PrivateRoute .
Маршруты / home связаны с компонентом DefaultLayout .
Компонент DefaultLayout содержит NestedRoute , то есть / home / users , который ведет к компоненту Users .
Частный маршрут работает правильно, и он направляет пользователя после входа в систему по умолчанию:
![enter image description here](https://i.stack.imgur.com/ymLG4.png)
Однако, когда я нажимаю на кнопку, которая маршрутизирует мне / home / users , я получаю этот пустой экран:
Есть идеи, что я сделал неправильно?
РЕДАКТИРОВАТЬ 1 : Когда я добавляю это в приложение. js:
const Users = React.lazy(() => import("../../views/Users/Users"));
<Route path="/home/users" component={Users} />
я перенаправляюсь на компонент Users . Однако не как вложенный маршрут , а как компонент в root маршрутах . Другими словами, компонент Users не отображается внутри компонента defaultLayout , а отображается как компонент root . Я надеюсь, что в этом есть смысл. Вот скриншот:
![enter image description here](https://i.stack.imgur.com/hZCxw.png)
EDIT 1 Вывод: Реализация вложенной маршрутизации не работает. Приложение по-прежнему направляется изнутри Приложение. js вместо изнутри DefaultLayout. js.
РЕДАКТИРОВАТЬ 2: Я понял, что даже без PrivateRoute и использование обычного Route компонента, вложенная маршрутизация по-прежнему не работает:
<Route exact path="/home" name="Home" component={DefaultLayout} />