Как лучше всего реализовать вложенные маршруты с независимыми страницами в React?

У меня довольно простая настройка маршрутизации в React (TypeScript). У меня есть Header и Footer, которые я всегда хочу отображать. Домашний компонент, который отображает содержимое моей главной страницы. Часть, которая меня немного беспокоит, — это раздел проектов. У меня есть отдельная страница под названием «Проекты», на которой отображаются проекты, над которыми я работал. Находясь на странице проектов, я хотел бы щелкнуть по реальным проектам и перейти на соответствующие сайты, как показано в кодовом блоке ниже. Приведенный ниже код работает, но кажется неправильным. Я попробовал вложить его так, чтобы оно выглядело как image2:

Когда я добавляю <Outlet/> к своему компоненту ProjectsPage, он обязательно отображает дочерние маршруты. Однако он также отображает родительскую страницу. В идеале я хочу, чтобы они отображались независимо. Я надеюсь в этом есть смысл.

Блок кода 1 — Вложенные маршруты:

<Router>
  <Header />
  <Routes>
    <Route path = "/" element = {<Home />} />
    <Route path = "/projects" element = {<ProjectsPage />}>
      <Route path = "portfolio" element = {<PortfolioProject />} />
      <Route path = "realestateapp" element = {<RealEstateProject />} />
    </Route>
    <Route path = "*" element = {<NoPage />} />
  </Routes>
  <Footer />
</Router>

Блок кода 2 — Невложенные маршруты:

<Router>
  <Header />
  <Routes>
    <Route path = "/" element = {<Home />} />
    <Route path = "/projects" element = {<ProjectsPage />} />
    <Route path = "/projects/portfolio" element = {<PortfolioProject />} />
    <Route path = "/projects/realestateapp" element = {<RealEstateProject />} />
    <Route path = "*" element = {<NoPage />} />
  </Routes>
  <Footer />
</Router>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш пример «code1» отличается от «code 2», поскольку он отображает ProjectsPage как маршрут макета. Если вы хотите, чтобы два примера кода были эквивалентны, вам следует визуализировать ProjectsPage как индексный маршрут под маршрутом макета "/projects".

Пример:

<Router>
  <Header />
  <Routes>
    <Route path = "/" element = {<Home />} />
    <Route path = "/projects">
      <Route index element = {<ProjectsPage />}>
      <Route path = "portfolio" element = {<PortfolioProject />} />
      <Route path = "realestateapp" element = {<RealEstateProject />} />
    </Route>
    <Route path = "*" element = {<NoPage />} />
  </Routes>
  <Footer />
</Router>
<Router>
  <Header />
  <Routes>
    <Route path = "/" element = {<Home />} />
    <Route path = "/projects" element = {<ProjectsPage />} />
    <Route path = "/projects/portfolio" element = {<PortfolioProject />} />
    <Route path = "/projects/realestateapp" element = {<RealEstateProject />} />
    <Route path = "*" element = {<NoPage />} />
  </Routes>
  <Footer />
</Router>

Обновление моего примера вложенного кода до того, что вы предложили, было именно тем, что мне нужно. Будет ли это правильным способом установки такого типа? Спасибо!

Anil Ferhat Ceran 13.04.2024 03:22

@AnilFerhatCeran Если вы хотите вложить маршруты, то да, это правильный способ сделать это. В противном случае любая реализация будет работать хорошо, они эквивалентны.

Drew Reese 13.04.2024 04:23

Другие вопросы по теме