Как в react-router сделать сайдбар опциональным?

Смотрю в доку как сделать сайдбар https://reacttraining.com/react-router/web/example...
Если всё верно понял, то такой сайдбар будет на каждой странице. Мне нужно, чтобы на некоторых страницах сайдбара не было. Как это можно делать?
  • Вопрос задан
  • 659 просмотров
Пригласить эксперта
Ответы на вопрос 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Можно сделать 2 разных "разметки", так сказать. В одной у вас есть сайдбар, в другой нет.
2 разные разметки = 2 разных компонента (роут-с-сайдбаром, роут-без-сайдбара).
Оборачиваете дочерние роуты в роут-с-сайдбаром, или в роут-без-сайдбара и там рисуете нужный шаблон + this.props.children. Вложенность роутов друг в друга - любая, можно таким образом еще усложнить логику отрисовки шаблона.

p.s. 4ю версию роута еще не смотрел. Но таким решением пользуюсь с 3й версией, думаю в 4м так же, либо еще удобнее придумали.

p.p.s. тема с фильтрацией, которую посоветовал Aves тоже подходит.

(пример, используется getComponent - это для динамической подгрузки)
<Route path='/reports' component={AuthenticatedContainer} onEnter={_ensureAuthenticated}>
  <Route getComponent={() => def(import('../containers/WiwthSidebar'))}>
    <Route path='/reports/a' getComponent={() => def(import('../containers/A'))} />
    <Route path='/reports/b' getComponent={() => def(import('../containers/B'))} />
  </Route>
  <Route getComponent={() => def(import('../containers/WithoutSideber'))}>
    <Route path='/reports/c' getComponent={() => def(import('../containers/C'))} />
  </Route>
</Route>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы