雖然您的應用程式只會使用單一路由器,但根據您的應用程式執行的環境,會有好幾個路由器可用。本文檔將協助您了解該使用哪一個。
在 v6.4 中,我們引入了支援新 資料 API 的新路由器
下列路由器不支援資料 API
建議將您的應用程式更新為使用 6.4 中的新路由器之一。資料 API 目前在 React Native 中不支援,但我應該會支援。
快速更新至 v6.4 最簡單的方式是取得來自 createRoutesFromElements
的協助,如此一來您就不需要將您的 <Route>
元素轉換為路由物件。
import {
createBrowserRouter,
createRoutesFromElements,
Route,
RouterProvider,
} from "react-router-dom";
const router = createBrowserRouter(
createRoutesFromElements(
<Route path="/" element={<Root />}>
<Route path="dashboard" element={<Dashboard />} />
{/* ... etc. */}
</Route>
)
);
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>
);
建議所有網站專案使用createBrowserRouter
。
它使用完整的 URL,而不是在 history.pushState
被標準化之前的網際網路應用程式中常見的雜湊 URL(#this/stuff
)。完整 URL 對於 SEO 更好、對於伺服器渲染更好,而且與網際網路平台的其餘部分相容性更高。
如你在靜態檔案伺服器上架設應用程式,你需要設定伺服器,將所有對 index.html
發出的請求傳送出去,以避免發生 404 錯誤。
如果出於某種原因無法使用完整的網址,createHashRouter
是次佳方案。
如果你不感興趣資料 API,你可以繼續使用 <BrowserRouter>
,或是在無法使用完整的網址時使用 <HashRouter>
。
在應用程式中使用 React Router API 來測試組件,最簡單的方式是使用 createMemoryRouter
或 <MemoryRouter>
,而非在應用程式中使用需要 DOM 歷程 API 的路由器。
某些 React Router API 內部會使用 `fetch`,而從 Node.js v18 開始才支援 `fetch`。如果專案使用的是 v17 或更低版本,應手動加入一個 `fetch` polyfill。一種方法是安裝 whatwg-fetch
,並依照下列範例加入至 jest.config.js
檔案中
module.exports = {
setupFiles: ["whatwg-fetch"],
// ...rest of the config
};
你將在 React Native 專案中使用 <NativeRouter>
。
目前,React Native 中不支援 v6.4 的資料 API,但預計會在未來支援。
React Router 6.4 新增了以下 API,僅在使用資料路由器時會運作
route.action
route.errorElement
route.lazy
route.loader
route.shouldRevalidate
route.handle
<Await>
<Form>
<ScrollRestoration>
useActionData
useAsyncError
useAsyncValue
useFetcher
useFetchers
useLoaderData
useMatches
useNavigation
useRevalidator
useRouteError
useRouteLoaderData
useSubmit
startViewTransition