分支
主 (6.23.1)開發
版本
6.23.1v4/5.xv3.x
選擇路由器
在本頁面中

挑選路由器

雖然您的應用程式只會使用單一路由器,但根據您的應用程式執行的環境,會有好幾個路由器可用。本文檔將協助您了解該使用哪一個。

使用 v6.4 資料 API

在 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

你將在 React Native 專案中使用 <NativeRouter>

目前,React Native 中不支援 v6.4 的資料 API,但預計會在未來支援。

資料 API

React Router 6.4 新增了以下 API,僅在使用資料路由器時會運作