You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在react-router-dom v6中将路由分组到独立组件中?

React Router 模块化嵌套路由的正确实现方式

你的思路没问题,只是react-router-dom v6+对Routes的子元素有严格限制——Routes的直接子节点必须是Route组件,不能是自定义组件,所以你直接在Routes里用<Page1Routes/>会触发报错。

下面给你两种符合需求的模块化实现方案:

方案一:组件返回Route数组,在Routes中展开渲染

把每个页面的路由封装成返回Route元素数组的组件,然后在Routes中直接渲染这个数组:

// Page1Routes.js
function Page1Routes() {
  return [
    <Route path="page1" key="page1-root">
      <Route path=":id" element={<Page1Detail />} />
      <Route path="" element={<Page1Home />} />
    </Route>
  ];
}

// Page2Routes.js同理
function Page2Routes() {
  return [
    <Route path="page2" key="page2-root">
      <Route path=":id" element={<Page2Detail />} />
      <Route path="" element={<Page2Home />} />
    </Route>
  ];
}

然后在主路由中使用:

<Routes>
  {Page1Routes()}
  {Page2Routes()}
</Routes>

方案二:使用路由配置对象 + useRoutes钩子(更推荐)

把路由结构拆分成模块化的配置对象,再通过useRoutes钩子生成路由,这种方式更易维护:

// routes/page1.js
const page1Routes = [
  {
    path: "page1",
    children: [
      { path: ":id", element: <Page1Detail /> },
      { path: "", element: <Page1Home /> }
    ]
  }
];

// routes/page2.js同理
const page2Routes = [
  {
    path: "page2",
    children: [
      { path: ":id", element: <Page2Detail /> },
      { path: "", element: <Page2Home /> }
    ]
  }
];

// 主路由文件
import { useRoutes } from "react-router-dom";
import page1Routes from "./routes/page1";
import page2Routes from "./routes/page2";

function AppRoutes() {
  const routes = [...page1Routes, ...page2Routes];
  return useRoutes(routes);
}

// 在App中使用
function App() {
  return (
    <BrowserRouter>
      <AppRoutes />
    </BrowserRouter>
  );
}

这两种方案都能实现你按页面分组嵌套路由的需求,方案二更适合大型项目的路由管理。

内容的提问来源于stack exchange,提问作者ATLUS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:30:44