【问题标题】:How to use different kinds of navbar components on different pages如何在不同页面上使用不同种类的导航栏组件
【发布时间】:2022-01-24 15:13:49
【问题描述】:

我为我们项目的两个不同子系统创建了两个不同的导航栏组件。

App.js

function App() {
  return (
    <>
      <Router>
        <Routes>
          <Route path="/" element={<CirclePage />} />
          <Route
            path = "*"
            element={
              <>
                <Navbar/>
                <Routes>
                  <Route path="/homepage" element={<Homepage />} />
                  <Route path="/events" element={<Events />} />
                  <Route path="/clubs" element={<Clubs />} />
                  <Route path="/notifications" element={<Notifications />} />
                  <Route path="/profile" element={<Profile />} />
                  <Route path="/contact" element={<Contact/>}/>
                </Routes>
              </>
            }
          />

          <Route 
            path = "*"
            element={
              <>
                <NavbarClub/>
                <Routes>
                  <Route path="/homepage-club" element={<HomepageClubs />} />
                  <Route path="/events-club" element={<EventManagement />} />
                  <Route path="/contact-clubs" element={<ContactClubs />} />
                  <Route path="/notifications-club" element={<NotificationsClub />} />
                  <Route path="/profile-club" element={<ClubProfile />} />
              </Routes>
              </>
            } 
            />

        </Routes>
      </Router>
    </>
  );
}

export default App;

导航栏在除主屏幕 CirclePage 之外的每个屏幕上都可见。我希望 Navbar 在主页、活动、俱乐部、通知、个人资料和联系人中可见,而 NavbarClub 在 -club 页面中可见。我该如何实现?

【问题讨论】:

    标签: javascript css reactjs react-hooks react-router


    【解决方案1】:

    为每个呈现特定导航栏的布局包装器组件创建一个 Outlet 用于嵌套的 Route 组件。

    例子:

    import { Outlet } from 'react-router-dom';
    
    const NavbarLayout = () => (
      <>
        <Navbar />
        <Outlet />
      </>
    );
    
    const NavbarClubLayout = () => (
      <>
        <NavbarClub />
        <Outlet />
      </>
    );
    

    应用程序

    function App() {
      return (
        <Router>
          <Routes>
            <Route path="/" element={<CirclePage />} />
            <Route path="*" element={<NavbarLayout />}>
              <Route path="homepage" element={<Homepage />} />
              <Route path="events" element={<Events />} />
              <Route path="clubs" element={<Clubs />} />
              <Route path="notifications" element={<Notifications />} />
              <Route path="profile" element={<Profile />} />
              <Route path="contact" element={<Contact />} />
            </Route>
    
            <Route path="*" element={<NavbarClubLayout />}>
              <Route path="homepage-club" element={<HomepageClubs />} />
              <Route path="events-club" element={<EventManagement />} />
              <Route path="contact-clubs" element={<ContactClubs />} />
              <Route path="notifications-club" element={<NotificationsClub />} />
              <Route path="profile-club" element={<ClubProfile />} />
            </Route>
          </Routes>
        </Router>
      );
    }
    

    【讨论】:

    • 我的两个问题上的代码 sn-ps 都是正确的,但遗憾的是我并不真正了解发生了什么。我正在学习在实施项目的同时做出反应,因为这是一项课堂作业,我不知道这些概念对我来说似乎很奇怪。你能解释一下在 中的 * 和 会发生什么吗?
    • @sarpoc 当然。 "*" 是一个可以匹配任何路由的通配符。 react-router-dom v6 可以使用相对路由/链接,因此我们能够将路由嵌套到每个布局中,因此“/homepage”的"/" 匹配布局包装器,然后匹配其余部分通过嵌套路由。 v5 升级指南中的Relative Routes and Links 可能比我刚刚做的更好地说明/解释。
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2015-09-25
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多