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

已用Routes包裹Route仍报错:需将Route嵌套在Routes元素内

解决React Router v6中"A is only ever to be used as the child of element"错误

你遇到的错误根源在于:在<Route>的element属性内部嵌套了<Route>组件。React Router v6的规则非常明确——只有<Routes>组件才能直接作为<Route>的父容器,任何普通组件(包括你自定义的IsUserLoggedIn、ProtectedRoute)内部都不能直接渲染<Route>。

修正方案

删除嵌套在权限校验组件内部的<Route index ... />,直接渲染对应的页面组件即可。外层<Route>已经指定了匹配路径,当路径匹配时,element属性中的内容会直接渲染,不需要额外嵌套index Route。

修正后的代码

<Routes>
  <Route
    path={ROUTES.LOGIN}
    element={
      <IsUserLoggedIn user={user} loggedInPath={ROUTES.DASHBOARD} navigate={Navigate}>
        <Login />
      </IsUserLoggedIn>
    }
  />
  <Route
    path={ROUTES.SIGN_UP}
    element={
      <IsUserLoggedIn user={user} loggedInPath={ROUTES.DASHBOARD} navigate={Navigate}>
        <Signup />
      </IsUserLoggedIn>
    }
  />
  <Route path={ROUTES.PROFILE} element={<Profile />} />
  <Route
    path={ROUTES.DASHBOARD}
    element={
      <ProtectedRoute user={user} navigate={Navigate}>
        <Dashboard />
      </ProtectedRoute>
    }
  />
  <Route path="/" element={<NotFound />} />
</Routes>
</Suspense>
</Router>

额外说明

你的自定义权限组件(IsUserLoggedIn、ProtectedRoute)的核心逻辑应该是:完成权限校验后,直接渲染传入的children(即页面组件);校验不通过时执行跳转逻辑,不要尝试在组件内部处理路由嵌套。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:08