主分支
分支
main (6.23.1)dev
版本
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>
);

Web 项目

我们建议所有 Web 项目使用 createBrowserRouter.

它使用完整的 URL,而不是在 history.pushState 标准化之前 Web 应用程序中常见的哈希 URL(#this/stuff)。完整的 URL 对 SEO 更好,对服务器渲染更好,并且与 Web 平台的其余部分更兼容。

如果您将应用程序托管在静态文件服务器上,则需要将其配置为将所有请求发送到您的 index.html,以避免出现 404 错误。

如果由于某种原因您无法使用完整的 URL,createHashRouter 是第二好的选择。

如果您对数据 API 不感兴趣,您可以继续使用 <BrowserRouter>,或者,如果您无法使用完整的 URL,则使用 <HashRouter>.

测试

测试使用 React Router API 的组件最简单的方法是使用 createMemoryRouter<MemoryRouter>,而不是您在应用程序中使用的需要 DOM 历史记录 API 的路由器。

一些 React Router API 在内部使用 fetch,该 API 仅从 Node.js v18 开始支持。如果您的项目使用 v17 或更低版本,您应该手动添加 fetch polyfill。一种方法是安装 whatwg-fetch 并将其添加到您的 jest.config.js 文件中,如下所示

module.exports = {
  setupFiles: ["whatwg-fetch"],
  // ...rest of the config
};

React Native

您将在 React Native 项目中使用 <NativeRouter>.

v6.4 中的数据 API 目前在 React Native 中不受支持,但最终应该会支持。

数据 API

以下 API 是在 React Router 6.4 中引入的,并且仅在使用数据路由器时才有效