useRoutes和createBrowserRouter的对比

26 阅读1分钟

一、 useRoutes

本质:Hook
版本:V6+
限制:需要配合BrowserRouter或者HashRouter进行使用
使用范围:在组件内部使用
返回值:得到路由匹配到的元素

二、createBrowserRouter

本质:函数
版本:V6.4+
限制:不需要配合BrowserRouter或者HashRouter进行使用,但是需要配合RouterProvider
使用范围:在组件外部创建路由配置
返回值:得到路由匹配到的元素

三、对比优缺点

useRoutes:简单、灵活,适合基础路由,但是不支持数据加载(loader)和错误处理(errorElement)
createBrowserRouter:功能更强,支持数据加载、错误处理等,适合复杂应用

四、代码示例:

useRouter:

function Router() { return useRoutes([ { path: "/", element: <Layout />, children: [ {const router = createBrowserRouter([ { path: "/", element: <Layout />, children: [ { path: "home", element: <Home />, loader: async () => { // 加载数据 return await fetchHomeData(); }, errorElement: <ErrorBoundary />, }, ], }, ]); path: "home", element: <Home /> }, ], }, ]); }

import { BrowserRouter as Router } from "react-router-dom"; root.render( <Router> {/* 需要 BrowserRouter */} <App /> </Router> );

createBrowserRouter:

const router = createBrowserRouter([ { path: "/", element: <Layout />, children: [ { path: "home", element: <Home />, loader: async () => { // 加载数据 return await fetchHomeData(); }, errorElement: <ErrorBoundary />, }, ], }, ]);

import { RouterProvider } from "react-router-dom"; import router from "./router/index"; function App() { return <RouterProvider router={router} />; // 不需要 BrowserRouter }