Выполнить изменение маршрута из компонента братьев и сестер в React Router V4

Я изучаю React.js. Я использую маршрутизатор React версии 4.3.1 и маршрутизатор React dom 4.3.1.

Моя текущая структура приложения приведена ниже.

<React.Fragment>
  {/* sidebar component */}
  <SideBar store = {Mystore} />
  <div className = "main-panel">
  {/* navbar component */}
  <NavBar store = {Mystore}/>
  {/* content component */}
  <Content store = {Mystore}/>
  {/* footer component */}
  </div>
</React.Fragment>

в моем компоненте содержимого у меня настроен маршрутизатор, как указано ниже.

<BrowserRouter> 
  <React.Fragment> 
  <Route exact path = "/phoenix/public" component = {Login} /> 
  <ProtectedRoute exact path = "/phoenix/public/sample" component = {SamplePage} /> 
  <ProtectedRoute exact path = "/phoenix/public/view_ticket" component = {ViewTicket} /> 
  <ProtectedRoute exact path = "/phoenix/public/create_ticket" component = {CreateTicket} /> 
  <ProtectedRoute exact path = "/phoenix/public/dashboard" component = {Dashborad} /> 
  </React.Fragment> 
</BrowserRouter>

Здесь Защищенный маршрут - это функциональный компонент, который проверяет, аутентифицирован ли пользователь, и возвращает Маршрут.

На моей боковой панели есть несколько тегов а, как показано ниже.

<li> 
  <a href = "dashboard"> 
  <i className = "ti-panel" /> 
  <p>Dashboard</p> 
  </a> 
</li>

Моя цель - переходить к разным маршрутам без обновления страницы при щелчке на боковой панели. Но нажатие href перезагружает страницу, и все мое состояние в моем Mobx обновляется. Я попытался использовать Перенаправить, но не смог получить маршрутизатор, указанный в компоненте «братья и сестры» (контент - это братья и сестры боковой панели). Понятия не имею, как этого добиться.

Вы пробовали использовать Ссылка на сайт?

c-chavez 15.11.2018 08:14

Вы пробовали использовать свойства navigationOption?

Rajneesh Shukla 15.11.2018 08:30

Я попытался использовать ссылки, но, думаю, ему нужен маршрутизатор, но в моем компоненте боковой панели нет маршрутизатора. Как я могу использовать ссылку в компоненте боковой панели, если мой маршрутизатор настроен в содержимом?

ahnafscm 15.11.2018 09:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
3
752
2

Ответы 2

Как указано в комментариях к вашему вопросу, обычные теги <a> не будут работать и обновят страницу. Поэтому вам нужно будет использовать Ссылка на сайт или NavLink.

Если вы хотите, чтобы он работал на боковой панели (дочерний компонент), вам нужно будет обернуть <BrowserRouter> вокруг всех компонентов, для которых вы хотите использовать маршруты.

Например, вот так (используя ваш код):

<BrowserRouter>
<React.Fragment>
  {/* sidebar component */}
  <SideBar store = {Mystore} />
  <div className = "main-panel">
  {/* navbar component */}
  <NavBar store = {Mystore}/>
  {/* content component */}
  <Content store = {Mystore}/>
  {/* footer component */}
  </div>
</React.Fragment>
</BrowserRouter>

И ваша боковая панель будет примерно такой:

<React.Fragment>
    <Link to = "/dashboard">Dashboard</Link> 
    ...
</React.Fragment>

Затем в вашем контентном компоненте. Вам необходимо удалить <BrowserRouter>

Мне удалось перейти к желаемому маршруту с помощью вашего решения, но содержимое не меняется в соответствии с маршрутом

ahnafscm 15.11.2018 16:57

Есть ли у вас переключатель маршрутов? reacttraining.com/react-router/core/api/Switch

PreDinnerSnack 15.11.2018 17:12

Я исправил свою проблему, установив BrowserRouter, как показано ниже, как было предложено @PreDinnerSnack.

<BrowserRouter>
<React.Fragment>
  {/* sidebar component */}
  <SideBar store = {Mystore} />
  <div className = "main-panel">
  {/* navbar component */}
  <NavBar store = {Mystore}/>
  {/* content component */}
  <Content store = {Mystore}/>
  {/* footer component */}
  </div>
</React.Fragment>
</BrowserRouter>

Затем я использовал Navlink в компоненте «Моя боковая панель». Что устранило проблему перехода к желаемому маршруту без обновления страницы. Но затем я столкнулся с другой проблемой, поскольку контент не обновлялся в соответствии с маршрутом.

Для этой проблемы я обнаружил, что HOC-обозреватель Mobx мешает моему маршрутизатору. Мне пришлось обернуть мой контент withRouter, как показано ниже, чтобы решить эту проблему.

withRouter(observer(Content));

Я надеюсь, что мое решение пригодится кому-то, так как я не нашел учебника с примерами реализации React Router, подобного моему, в Интернете.

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