При рендеринге вложенных маршрутов вам необходимо добавить путь URL до вложенных маршрутов.
Вложение маршрута
РЕДАКТИРОВАТЬ: означал использовать match.path
вместо match.url
. path
- это шаблон пути, используемый для сопоставления и полезный для построения вложенных маршрутов.
const Common = ({ match: { path } }) => { // extract the path from match route prop
const classes = useStyles();
return (
<div>
<div className={classes.root}>
<CssBaseline />
<SideNav />
<main className={classes.content}>
<div className={classes.toolbar} />
<Switch>
<PrivateRoute path={`${path}/customers/:id`} component={CustomersDetail} />
<PrivateRoute path={`${path}/customers`} component={Customers} />
<PrivateRoute path={`${path}/products/:id`} component={ProductsDetail} />
<PrivateRoute path={`${path}/products`} component={Products} />
<PrivateRoute path={[`${path}/`, `${path}/dashboard`]} component={Dashboard} />
</Switch>
</main>
</div>
</div>
);
};
ПРИМЕЧАНИЕ: Немного изменен порядок маршрутов, чтобы они соответствовали более конкретным * Сначала 1028 * путей, поскольку Switch
возвращает только первое совпадение.
Вам также необходимо удалить опору exact
из вашего root маршрутизатора, чтобы он мог продолжать соответствовать другим суб- маршруты в пределах Common
.
function Routes() {
return (
<Router>
<Switch>
<Route path="/login" component={Login} />
<Route path="/signup" component={Signup} />
<PrivateRoute path="/" component={Common} />
</Switch>
</Router>
);
}