EP06 | React 18 全家桶複習 - React-Router (路由驗證及攔截)
路由驗證及攔截的快速方法
在需要登入的頁面中,需要先判斷是否已經被授權,有授權才可以進入指定頁面。
React-Router 提供了一個更簡便的方法,再進入該該路由前,先透過 loader 方法來進行驗證,而後透過 errorElement 來指定驗證不成功會進入哪個頁面。
https://reactrouter.com/en/main/route/error-element
測試用範例(使用 localStorage 做驗證測試)
假設進入 /home/message 要經過驗證,驗證不成功則返回 /login 頁面
注意事項:
- React-Router v6 明確表示: 新的 Data APIs 僅能透過某些新的路由來使用。其中
createBrowserRouter
是被推薦用在 Web 應用上的(createBrowserRouter
是取代useRoutes
的)。
使用
createBrowserRouter
時,必須搭配<RouterProvider router={引入的路由表} />
在 index.js 中,無須用
<RouterProvider router={引入的路由表}>
包裹住<App/>
,而是透過路由設置路徑設置導出 App 頁面。在路由中,透過
loader
屬性解決路由驗證及攔截有 2 種方法:
- 返回
new Error("訊息內容")
,並透過另一個屬性errorElement
指定如果loader
返回錯誤要前往的頁面。 - 返回
redirect("頁面路徑")
,直接可以跳轉到指定頁面(官方: 建議在 loader、action 等 API 中使用 redirect 而非 useNavigate)。