Задать вопрос
vicodin
@vicodin
Имею некоторый опыт

Как вы рендерите компоненты в зависимости от роута?

Задавал похожий вопрос на StackOverflow, получил несколько интересных ответов. Но интересует практический опыт разработчиков.

Вкратце - периодически возникает задача, рендерить какой-то компонент(хэдер, футер, сайдбар, что угодно) только на некоторых роутах. Допустим в приложении 100 роутов, 50 из них должны иметь хэдер, 50 нет.

Как предложения получил варинаты:

1) Использовать HOC
2) Вот такую конструкцию:
...
<Switch>
  <Route path="/noheader1" ... />
  <Route path="/noheader2" ... />
  <Route path="/noheader3" ... />
  <Route component={HeaderRoutes} />
</Switch>
...

HeaderRoutes = props => (
  <React.Fragment>
    <Header/>
    <Switch>
      <Route path="/withheader1" ... />
      <Route path="/withheader2" ... />
      <Route path="/withheader3" ... />
    </Switch>
  </React.Fragment>
)


В принципе обе подходят, но у каждой есть свои нюансы. А если добавлять учитывание не только хэдера, а ещё и футера, и вдруг их общие роуты не пересекаются?

Интересует скорее практический опыт, возникают ли у вас такие ситуации и как вы их разрешаете? Или просто не паритесь о DRY и пихаете хэдер в каждый компонент где он нужен?
  • Вопрос задан
  • 234 просмотра
Подписаться 2 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Robur
@Robur
Знаю больше чем это необходимо
<Route path="/iwantrenderonthis" component={MyComponent} />

Если path не устраивает чем-то можно усложнить матчинг вплоть до своего кастомного но суть та же. HOC довольно удобен.
и это можно положить в любое место в приложении, если роут совпадает - MyComponent рендерится, если нет то нет.
ReactRouter v4, может в прошлых было сложнее, уже не помню.
Возможно хуки дадут сделать это красивее, не пробовал.
Ответ написан
GreyCrew
@GreyCrew
Full-stack developer
В плане практической реализпции я бы немного перегрузил роуты, (по факту их итак приходится перегружать для области видимости)

Далее можно обернуть его в Redux контейнер и по какому то (только вам известному) условию отправлять в него параметр видимости в зависимости от которого можно рендерить или не рендерить какой то компонент
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽