Skip to content

<RouterProvider>

所有数据路由对象都将传递给该组件,以渲染应用程序并启用其他数据 API。

由于在数据 API 的设计中解耦了获取和呈现,因此您应该在 React 树之外创建路由,并使用静态定义的路由集。有关此设计的更多信息,请参阅 Remixing React Router 博文和 When to Fetch 会议演讲。

jsx
import {
  createBrowserRouter,
  RouterProvider,
} from "react-router-dom";

const router = createBrowserRouter([
  {
    path: "/",
    element: <Root />,
    children: [
      {
        path: "dashboard",
        element: <Dashboard />,
      },
      {
        path: "about",
        element: <About />,
      },
    ],
  },
]);

ReactDOM.createRoot(document.getElementById("root")).render(
  <RouterProvider
    router={router}
    fallbackElement={<BigSpinner />}
  />
);
import {
  createBrowserRouter,
  RouterProvider,
} from "react-router-dom";

const router = createBrowserRouter([
  {
    path: "/",
    element: <Root />,
    children: [
      {
        path: "dashboard",
        element: <Dashboard />,
      },
      {
        path: "about",
        element: <About />,
      },
    ],
  },
]);

ReactDOM.createRoot(document.getElementById("root")).render(
  <RouterProvider
    router={router}
    fallbackElement={<BigSpinner />}
  />
);

fallbackElement

如果您没有在服务器上渲染应用程序, createBrowserRouter 将在挂载时启动所有匹配的路由加载器。在此期间,您可以提供 fallbackElement ,向用户表明应用程序正在运行。将静态托管 TTFB 计算在内!

jsx
<RouterProvider
  router={router}
  fallbackElement={<SpinnerOfDoom />}
/>
<RouterProvider
  router={router}
  fallbackElement={<SpinnerOfDoom />}
/>

future

一组可选的 Future Flags。我们建议您尽早选择使用新发布的 future flags,以方便您最终迁移到 v7版本。

jsx
function App() {
  return (
    <RouterProvider
      router={router}
      future={{ v7_startTransition: true }}
    />
  );
}
function App() {
  return (
    <RouterProvider
      router={router}
      future={{ v7_startTransition: true }}
    />
  );
}