⊗jsrtPmRtNR 27 of 47 menu

เส้นทางซ้อนกันใน React Router

ในบทเรียนนี้เราจะทำความรู้จักกับ เส้นทางซ้อนกัน (Nested Routes) เริ่มต้นแอปพลิเคชันที่เราสร้างในบทเรียนที่แล้ว โดยการคลิกที่ลิงก์ต่าง ๆ เราจะเข้าสู่หน้าสินค้าแยกต่างหาก สมมติว่าเรารู้สึกว่าวิธีนี้ไม่สะดวก และเราอยากให้รายการสินค้าและหน้าสินค้าแสดงผลอยู่เคียงข้างกันบนหน้าจอเดียวเพื่อให้เห็นภาพมากขึ้น มาลองทำกันดู

เพื่อทำสิ่งนี้ เรามาเปิดไฟล์ main.jsx แล้วทำให้เส้นทางสำหรับหน้าสินค้ากลายเป็นเส้นทางย่อยของเส้นทางหลัก หรือพูดอีกอย่างคือ "ซ้อน" มันไว้ในเส้นทางหลัก โดยใช้คุณสมบัติเพิ่มเติมของอ็อบเจ็กต์เส้นทาง นั่นคือ children:

const router = createBrowserRouter([ { path: '/', element: <Root />, errorElement: <ErrorPage404 />, children: [ { path: 'products/:productId', element: <Product />, }, ], }, ]);

ลองคลิกที่ลิงก์อีกครั้ง แต่ทางด้านขวาของรายการสินค้าเรายังไม่เห็นอะไร ทั้งนี้เพราะเรายังไม่ได้บอกเส้นทางหลักว่าเราต้องการให้แสดงผลเส้นทางย่อยที่ไหน

เพื่อการแสดงผลองค์ประกอบของเส้นทางย่อยภายในเส้นทางหลัก เราจะใช้คอมโพเนนต์ Outlet มาดำเนินการนำเข้าจากไลบรารีในไฟล์สำหรับเส้นทางหลัก:

import { Outlet } from 'react-router-dom';

จากนั้นให้ใส่ไว้ใน div #product และเพิ่มเข้าไปในเลย์เอาต์สำหรับเส้นทางหลักท้ายสุดของโค้ด HTML หลังปิดแท็ก nav และให้ครอบโครงสร้างทั้งหมดด้วย div อีกชั้น #main:

return ( <div id="main"> <nav> <a href={`/products/1`}>Product1</a> <a href={`/products/2`}>Product2</a> </nav> <div id="product"> <Outlet /> </div> </div> );

เมื่อคลิกที่ลิงก์ ตอนนี้เราจะเห็นทั้งรายการสินค้าและหน้าสินค้าแล้ว

มาลองเพิ่มสไตล์เล็กน้อยในไฟล์ index.css ของเรา:

h1, h2 { margin: 0; } div#main { display: flex; margin: 20px; } div#product { margin-left: 40px; }

ใช้แอปพลิเคชันที่คุณสร้างในการมอบหมายงานของบทเรียนที่แล้ว โดยใช้เนื้อหาจากบทเรียนนี้ ให้ทำให้เส้นทางสำหรับหน้าข้อมูลนักศึกษาเป็นเส้นทางที่ซ้อนอยู่ภายในเส้นทางหลัก

และตอนนี้ให้ทำให้เมื่อคลิกที่ลิงก์แล้วบนหน้าจอจะแสดงทั้งรายชื่อนักศึกษาและหน้าข้อมูลนักศึกษา

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ