在 Day 18 | React入門:React Router 路由控制(上) 和 Day 19 | React入門:React Router 路由控制(下)
 的文章中,我們看到路由在專案中可以怎麼應用,而這篇文章主要聚焦在 React Router v6 與前一版本的差異。
Switch、Route、Redirect、exact 等屬性,寫法較冗長exact 被移除,v6 會自動自動比對「最精確」的路由Redirect 被 <Navigate /> 取代,更直覺Route 自動傳 match、history、location
useParams、useNavigate、useLocation,符合 hooks 的精神,讓寫法更一致<Routes> 中宣告子路由 <Route>,就像 React JSX 的巢狀結構一樣,一眼就能看出父子關係| v5(舊版) | v6 / v7 (新版) | |
|---|---|---|
| Router 寫法 | <Switch> 包住 routes | 
<Routes> 包住 routes | 
| Route 指定元件 | <Route path="/about" component={About} /> | 
<Route path="/about" element={<About />} /> | 
| 預設比對 | <Route exact path="/"> 才能精確比對 | 
exact 被移除,預設就是精確比對 | 
| 巢狀路由 | 子元件內再寫 <Route> | 
在 <Routes> 中直接寫巢狀 <Route> | 
| 取得路由參數 | props.match.params.id | 
const { id } = useParams(); | 
| 導頁 | history.push('/home') | 
navigate('/home'); | 
| 重新導向 Redirect | <Redirect to="/home" /> | 
<Navigate to="/home" /> | 
新專案建議使用最新版本 (v6/v7),因為語法更簡單,巢狀路由更直覺。
舊專案如果已經使用 v5,升級時要更注意改動。