ค้นหาเว็บไซต์

reactjs - แนวทางปฏิบัติที่ดีที่สุดในการใช้งานเส้นทางซ้อนที่มีหน้าที่เป็นอิสระใน React คืออะไร?


ฉันมีการตั้งค่าเส้นทางที่ค่อนข้างง่ายใน React (TypeScript) ฉันมี Header และ Footer ที่ฉันต้องการให้แสดงตลอดเวลา มีคอมโพเนนต์หน้าแรกที่แสดงเนื้อหาหน้าแรกของฉัน ส่วนที่ทำให้ฉันรำคาญเล็กน้อยคือส่วนโปรเจกต์ ฉันมีหน้าที่แยกออกมาชื่อ Projects ที่แสดงโปรเจกต์ที่ฉันเคยทำ ขณะที่อยู่ในหน้าของโปรเจกต์ ฉันต้องการคลิกที่โปรเจกต์จริงๆ แล้วไปยังเว็บไซต์ของพวกมันตามที่แสดงในโค้ดด้านล่าง โค้ดด้านล่างใช้งานได้ แต่ดูเหมือนจะผิด ฉันพยายามทำการซ้อนมันให้ดูเหมือน image2:

เมื่อฉันเพิ่ม <Outlet/> ลงในคอมโพเนนต์ ProjectsPage มันก็จะแสดงผลเส้นทางย่อยได้แน่นอน แต่ก็จะแสดงหน้าพ่อแม่ด้วย ในอุดมคติฉันอยากให้พวกมันถูกแสดงผลอย่างอิสระ หวังว่านี่จะเข้าใจได้

บล็อกโค้ด 1 - เส้นทางซ้อน:

<Router>
  <Header />
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/projects" element={<ProjectsPage />}>
      <Route path="portfolio" element={<PortfolioProject />} />
      <Route path="realestateapp" element={<RealEstateProject />} />
    </Route>
    <Route path="*" element={<NoPage />} />
  </Routes>
  <Footer />
</Router>

บล็อกโค้ด 2 - เส้นทางที่ไม่ซ้อนกัน:

<Router>
  <Header />
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/projects" element={<ProjectsPage />} />
    <Route path="/projects/portfolio" element={<PortfolioProject />} />
    <Route path="/projects/realestateapp" element={<RealEstateProject />} />
    <Route path="*" element={<NoPage />} />
  </Routes>
  <Footer />
</Router>

คำตอบ #1

ตัวอย่าง "code1" ของคุณไม่เหมือนกับ "code 2" เนื่องจากมันเรนเดอร์ ProjectsPage เป็นเส้นทางเลย์เอาต์ หากคุณต้องการให้ตัวอย่างโค้ดทั้งสองเท่ากัน คุณควรเรนเดอร์ ProjectsPage เป็นเส้นทางดัชนีภายใต้เส้นทางเลย์เอาต์ "/projects"

ตัวอย่าง :

<Router>
  <Header />
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/projects">
      <Route index element={<ProjectsPage />}>
      <Route path="portfolio" element={<PortfolioProject />} />
      <Route path="realestateapp" element={<RealEstateProject />} />
    </Route>
    <Route path="*" element={<NoPage />} />
  </Routes>
  <Footer />
</Router>
<Router>
  <Header />
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/projects" element={<ProjectsPage />} />
    <Route path="/projects/portfolio" element={<PortfolioProject />} />
    <Route path="/projects/realestateapp" element={<RealEstateProject />} />
    <Route path="*" element={<NoPage />} />
  </Routes>
  <Footer />
</Router>