Реагирующий маршрутизатор: обертывание некоторых маршрутов компонентом, а не непосредственно внутри коммутатора

#reactjs #react-router

#reactjs #react-router

Вопрос:

Я пытаюсь сделать что-то вроде этого

 <Switch>
    <SomeNavBar>
        <Route path="page1">Page 1</Route>
        <Route path="page2">Page 2</Route>
        <Route path="page3">Page 3</Route>
    </SomeNavBar>
    <OtherNavBar>
        <Route path="admin">Admin Page</Route>
    </OtherNavBar>
</Switch>
 

Где у меня есть компонент-оболочка для маршрутов, которые не являются страницей администратора.

Однако маршрут администратора не отображает Admin Page , он просто отображает пустую страницу. Другие маршруты работают нормально.

Есть ли способ добиться такого поведения?

Ответ №1:

В вашем примере есть пара проблем, не связанных с вопросом, который вы должны исправить прежде всего.

Во-первых, прямые дочерние элементы a Switch всегда должны быть Route or Redirect — он не знает, что делать с любым другим элементом, и просто отобразит первое, что увидит (в вашем случае, SomeNavBar компонент). Во-вторых, path объявления должны предваряться косой чертой, чтобы маршрутизатор мог их правильно построить /page1 /admin , например, so и .

Учитывая это, вот несколько надуманный пример того, как добиться нужного вам поведения. Для страниц мы проверяем список возможных фрагментов перед рендерингом SomeNavBar и правильный маршрут. Обратите внимание также на exact параметр — это значит, что мы также не сопоставляем пути, которые начинаются только с указанного фрагмента, например /page1foo :

 <Switch>
  <Route exact path={['/page1', '/page2', '/page3']}>
    <SomeNavBar>
        <Route path="/page1">Page 1</Route>
        <Route path="/page2">Page 2</Route>
        <Route path="/page3">Page 3</Route>
    </SomeNavBar>
  </Route>
  <Route path="/admin">
    <OtherNavBar>
      Admin Page
    </OtherNavBar>
  </Route>
</Switch>
 

Комментарии:

1. Спасибо, я не знал, что вы можете передать массив в path