#javascript #reactjs #react-router #react-router-dom #nested-routes
#javascript #reactjs #react-router #react-router-dom #вложенные маршруты
Вопрос:
Мне нужен доступ к другим компонентам с домашней страницы маршрутизатора. С этой структурой, которую я установил, страница «404» не открывается. Кроме того, когда я применяю параметр exact path =»/» к частному маршруту, домашний компонент не отображается. Как мне решить эти проблемы?
Заранее благодарю вас за ваши ответы.
Это мой app.js =>
<Router>
<Switch>
<Route exact path="/login">
<Login />
</Route>
<Route exact path="/register">
<Register />
</Route>
<PrivateRoute exact path="/search">
<Search />
</PrivateRoute>
<PrivateRoute exact path="/"> // This is the part where there's a problem. exact works when I don't add it.
<Home />
</PrivateRoute>
<Route path="*">
<Fourzerofour />
</Route>
</Switch>
</Router>
Это мой Home.js =>
<Header />
<Grid className={classes.container} container spacing={3}>
<Grid className={classes.leftSidebar} item md={3}>
<LeftSidebar />
</Grid>
<Grid item xs={12} md={6}>
<Switch>
<Route path="/">
<HomePageFeed />
</Route>
<Route path="/profile">
<ProfileDetail />
</Route>
<Route path="/pets/:id" component={PetDetail} />
</Switch>
</Grid>
<Grid className={classes.rightSidebar} item xs={12} md={3}>
<RightSidebar />
</Grid>
</Grid>
Комментарии:
1. Используйте что-то вроде этого :
<PrivateRoute path="/home"><Home /></PrivateRoute>
.
Ответ №1:
Если вы не используете exact
, он никогда не будет отображаться Fourzerofour
, потому что все пути совпадают "/"
.
Но, если вы используете exact
, то для вашего домашнего компонента разрешен только путь "/"
. Это означает /profile
, что и /pets/:id
не будет отображаться.
Итак, чтобы исправить это, вам, вероятно, придется указать все пути для вашего домашнего компонента
<PrivateRoute exact path={["/", "/profile", "/pets/:id"]}>
<Home />
</PrivateRoute>