Возможно ли иметь несколько <Switch> в React.js?

Я создаю проект React без Redux.

Я бы хотел иметь два, а в данном случае 3 разных переключателя.

1st Switch сможет переключаться между домашней страницей (обычным веб-сайтом) и UserPage (Dashboard), когда пользователь вошел в систему ... Тогда каждый из них также будет переключателем, поэтому Home будет переключаться между компонентами Home, а UserPage будет переключаться между компонентами UserPage. Это вообще возможно?

                        Main Switcher 
     Home Page (Switch)              Dashboard
Home About Contact, Careers     My Profile, Courses, Classes, Donations...

Так должен выглядеть и структурироваться проект.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
15
0
13 984
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

Что-то в этом роде должно работать в вашем случае:

const Home = ({match}) => {
  return(
    <Switch>
      <Route path = {match.url} exact = {true} component = {HomeDefaultComponent} />
      <Route path = {`${match.url}/about`} exact = {true} component = {About} />
      <Route path = {`${match.url}/contact`} exact = {true} component = {Contact} />
      <Route path = {`${match.url}/careers`} exact = {true} component = {careers} />
    </Switch>
  );
};

const Dashboard = ({match}) => {
  return(
    <Switch>
      <Route path = {match.url} exact = {true} component = {DashboardDefaultComponent} />
      ... other Dashboard paths like Home component above
    </Switch>
  );
};

const App = () => {
  return(
    <Switch>
      <Route path='/home' component = {Home} />
      <Route path='/dashboard' component = {Dashboard} />
    </Switch>
  );
}

Не работает. Вы можете попробовать, и это то, что я пытался сделать, но это не сработало. Он не показывает ничего, кроме компонентов по умолчанию, которые передаются приложением const ...

Amel Amcë Muminovic 11.03.2018 16:14

Что ж, я нашел какое-то решение. Вместо '$ {match.url} / about' я использовал path = {match.url + '/ about'}, и он работает

Amel Amcë Muminovic 11.03.2018 16:19

Привет. Рад, что вам удалось заставить его работать. В моем коде я использую шаблонные литералы. Результат такой же, как и у вас. Если вы хотите узнать об этом больше, посмотрите это: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Ура! :)

Shishir 11.03.2018 21:48

Но еще один вопрос? <Route path = '/ home' component = {Home} />, если я удалю здесь '/ home' и поставлю только '/', ничего не будет работать. Что здесь должно быть?

Amel Amcë Muminovic 12.03.2018 15:24

Вы можете показать мне свой код? Не видя этого, я могу только догадываться. (1) если вы не передаете опору exact в свой маршрут, она совпадает со всем, что начинается с указанного пути. В этом случае все будет отображаться на этом маршруте, включая /dashboard. Чтобы исправить это, переместите маршрут панели управления над домашним маршрутом. (2) В маршрутах, определенных внутри Home, вы проверяете наличие match.url + /about. Поскольку match.url - это просто /, возможно, он пытается сопоставить //about. Чтобы исправить это, попробуйте удалить ведущий / из маршрутов.

Shishir 12.03.2018 18:44

Могу я связаться с кем-нибудь из ваших контактов, чтобы уточнить еще одну вещь, которую я забыл спросить. Теперь, когда у меня есть задний рендеринг компонентов, мне понадобится еще один заголовок (панель навигации) и другой компонент переключения. Например, чтобы иметь такие маршруты, как abc.com/dashboard/my-profile, abc.com/dashboard/payments и т. д. Если я попытаюсь сопоставить их так же, как и для этих двух, я получаю 'не могу получить URL-адрес неопределенный'

Amel Amcë Muminovic 16.03.2018 22:23

Вы можете поделиться своим кодом? Ссылка на github или пример на codeandbox?

Shishir 17.03.2018 18:09

Я также нашел это полезным: reactrouter.com/web/example/nesting

BairDev 06.01.2021 10:31

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