javascript - React router dom 6 路由结构与布局

标签 javascript reactjs react-router-dom

我有这个页面结构

  • 登录(根页面)
  • 忘记密码
  • 仪表板(需要包装布局)
  • 订单(需要包装布局)

订单页面和仪表板需要包装器布局。

现在我有这个代码

const routes = createBrowserRouter(
  createRoutesFromElements(
    <Route path="/" element={<RootLayout />}>
      <Route path="orders" element={<Orders />} />
      <Route path="dashboard" element={<Dashboard />} />
    </Route>
  )
);

这是根布局

export default function RootLayout() {
  return (
    <div>
      <header>
        <h1>This top header</h1>
      </header>
       
      <main>
        <Outlet/>
      </main>
    </div>
  )
}

我不确定如何将登录页面添加到根路径并将忘记密码页面添加到 "/forget-password" 路径。 RootLayout 也不应该包裹在这两个页面中。

我已经尝试过这种方法,即使它添加了额外的 "/app" 部分。但这也没有按预期工作

createRoutesFromElements(
  <Route path="/" element={<Login  />}>
    <Route path="app" element={<RootLayout />}>
      <Route path="orders" element={<Orders />} />
      <Route path="dashboard" element={<Dashboard />} />
    </Route>
  </Route>
)

如何使用 react-router-dom@6 实现此目的?

最佳答案

createRoutesFromElements 需要单个 React 节点。在 "/" 上渲染单个“外部”路由,不带默认渲染 Outlet 的元素。 “RootLayout”是布局路由,不需要参与路由路径匹配,省略 path="app" 属性。

createRoutesFromElements(
  <Route path="/">
    <Route index element={<Login />} /> // <-- "/"
    <Route
      path="forgot-password             // <-- "/forgot-password"
      element={<ForgotPassword />}
    />

    <Route element={<RootLayout />}>
      <Route
        path="orders"                   // <-- "/orders"
        element={<Orders />}
      />
      <Route
        path="dashboard"                // <-- "/dashboard"
        element={<Dashboard />}
      />
    </Route>
  </Route>
)

关于javascript - React router dom 6 路由结构与布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75105526/

相关文章:

字符串元素数组上的Javascript映射方法

javascript - angularjs动态改变页脚

javascript - react 导航 : Component is not being unmounted on pop or back button #5775

javascript - reducer - 添加新元素

javascript - react /功能组件/ Prop 改变/getDerivedStateFromProps

javascript - react-router-dom v6 路由显示空白页

javascript - JQUERY 触摸屏键盘

javascript - 在 javascript 中使用正则表达式匹配并返回 [] 中包含的所有字符串

reactjs - React 将一个对象传递给路由

javascript - 在 index.html 中使用来自 cdn 链接的 React 组件