Как показывать ссылки только на компонент приложения, а не на дочерний компонент в React, используя React Router?

#javascript #reactjs #react-router #react-router-dom

#javascript #reactjs #react-router #react-router-dom

Вопрос:

У меня есть компонент приложения, создать компонент и присоединиться к компоненту. Я хочу отображать ссылки / навигацию для доступа к компоненту Create и Join только в компоненте приложения. В настоящее время, когда я нажимаю на Создать ссылку и присоединиться к ссылке, я все еще вижу эти ссылки.

Это моя текущая настройка. App.js

 function App(props) {
   return (
       <Router>
           <ul>
               <li>
                   <Link to="/create">Create</Link>
               </li>
               <li>
                   <Link to="/join">Join</Link>
               </li>
           </ul>

           <div>
               <Switch>
                   <Route path="/create">
                       <Create />
                   </Route>
                   <Route path="/join">
                       <Join />
                   </Route>
               </Switch>
           </div>
       </Router>
   );
}
 

Ответ №1:

Вы можете разместить их на определенном, например, на вашем «домашнем» маршруте. Router сопоставляет и отображает маршруты включительно, поэтому вам нужно будет указать exact prop, поскольку префикс пути «/» соответствует всем путям.

 function App(props) {
  return (
    <Router>
      <Route exact path="/"> // <-- only render when path is exactly "/"
        <ul>
          <li>
            <Link to="/create">Create</Link>
          </li>
          <li>
            <Link to="/join">Join</Link>
          </li>
        </ul>
      </Route>

      <div>
        <Switch>
          <Route path="/create">
            <Create />
          </Route>
          <Route path="/join">
            <Join />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}
 

В качестве альтернативы вы можете поместить их на «общий» маршрут в конце Switch , поэтому, если путь не соответствует чему-либо еще над ним, он будет отображаться. Switch Эксклюзивное сопоставление и рендеринг маршрутов.

 function App(props) {
  return (
    <Router>
      <div>
        <Switch>
          <Route path="/create">
            <Create />
          </Route>
          <Route path="/join">
            <Join />
          </Route>
          <Route> // <-- matches only if nothing matched above
            <ul>
              <li>
                <Link to="/create">Create</Link>
              </li>
              <li>
                <Link to="/join">Join</Link>
              </li>
            </ul>
          </Route>
        </Switch>
      </div>
    </Router>
  );
}