升級 React Router v6 筆記
2022-04-08
本文為 React Router 升級第 6 版的筆記。
React Router v6 Changelog
- 將 Switch 替換成 Routes
- 把 Route 用 Routes 包起來
- 不再需要 exact 屬性
- 調整 Nested Routes 定義方式
- 加上米字號來配對子元件中的 Routes
- 巢狀路由的子組件的路徑寫法
- 集中定義 Routes 搭配 Outlet Component,且無需米字號
- NavLink 的 activeClassName 移除,請改用 ClassName
- 將 Redirect 替換成 Navigate
- 移除 useHistory 改用 useNavigate 執行程式化導航
- Prompt 直接移除,沒有替代方案
Switch 改名為 Routes 並改用 element 屬性指定渲染元件
第一個變化,就是 React Router 版本 6 將原本的 <Switch>
更改為 <Routes>
,這只是單純地更改名字,用法沒有改變。
使用上,一樣是要用 <BrowserRouter>
包住 <App>
,以指定是要在 <App>
底下規劃路由。
然而,註冊路由元件的方式就不一樣了,原先 V5 我們是在 <Route>
的子層放入 Page Component,更新到 V6 後則是改用 <Route>
元件的 element
屬性來指定要渲染的頁面元件等 JSX 程式碼。
把 Route 用 Routes 包起來
錯誤訊息:A
<Route>
is only ever to be used as the child of<Routes>
element, never rendered directly. Please wrap your<Route>
in a<Routes>
.
在第 5 版,我們不一定要使用 <Switch>
來包住 <Route>
。