在前兩篇文章有介紹到 React Route(路由) 的概念與實作,除了一般路由之外,Nested Routes(巢狀路由)可以利用層級的結構來管理頁面,這篇文章主要就是介紹路由的延伸 - Nested Routes(巢狀路由)。
Nested Routes(巢狀路由)就像「一個頁面裡再放入子頁面」,讓路由之間呈現父子層級結構:
範例情境:/help
→ 顯示幫助主頁/help/faq
→ 顯示幫助主頁 + 常見問題/help/contact
→ 顯示幫助主頁 + 聯絡我們
HelpLayout.js
import { NavLink, Outlet } from "react-router-dom"
export default function HelpLayout() {
return (
<div className="help-layout">
<h2>Website Help</h2>
<p>有什麼需要幫助的?</p>
<nav>
<NavLink to="faq">常見問題</NavLink>
<NavLink to="contact">聯絡我們</NavLink>
</nav>
<Outlet />
</div>
)
}
App.js
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import HelpLayout from "./HelpLayout";
import Faq from "./Faq";
import Contact from "./Contact";
function App() {
return (
<Router>
<div className="content">
<Routes>
<Route path="help" element={<HelpLayout />}>
<Route path="faq" element={<Faq />} />
<Route path="contact" element={<Contact/>}/>
</Route>
</Routes>
</div>
</Router>
);
}
export default App;
);
}
Faq.js
export default function Faq() {...}
Contact.js
export default function Contact() {...}
瀏覽器執行畫面
<Outlet />
一起使用,負責放置共用的 UI 與框架。<Outlet />
的功能是 React Router v6 中專門用在巢狀路由 (Nested Routes) 的一個特殊元件,
可以把它想像成一個插槽,子路由的內容會在這裡被渲染出來。
<Outlet />
中