try 使用<Outlet />呈现布局内的仪表板组件,但在访问/admin/dashboard路径时,布局未呈现.如何解决这个问题?谢谢你们的帮助

App.js

export default function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route exact path="/admin" element={<Layout />} />
          <Route exact path="/admin/dashboard" element={<Dashboard />} />
        </Routes>
      </Router>
    </div>
  );
}

Layout.js

export default function Layout() {
  return (
    <Fragment>
      <div className="sb-nav-fixed">
        <Navbar />

        <div id="layoutSidenav">
          <div id="layoutSidenav_nav">
            <Sidebar />
          </div>

          <div id="layoutSidenav_content">
            <main>

              <Outlet />
              <Navigate from="admin" to="/admin/dashboard" />

            </main>
            <Footer />
          </div>
        </div>
      </div>
    </Fragment>
  );
}

Dashboard.js

export default function Dashboard() {
  return <h1>Dashboard</h1>;
}

推荐答案

布局路由需要actually具有嵌套路由,以使其能够将其element呈现到Outlet中,而不是作为sibling 路由.

export default function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route path="/admin" element={<Layout />}>
            <Route path="dashboard" element={<Dashboard />} />
          </Route>
        </Routes>
      </Router>
    </div>
  );
}

此外,如果你的don't想要在"/admin"上渲染任何东西,那么从Layout中删除重定向,从布局路由中删除pathprops ,并更新仪表板的path.

示例:

export default function Layout() {
  return (
    <Fragment>
      <div className="sb-nav-fixed">
        <Navbar />

        <div id="layoutSidenav">
          <div id="layoutSidenav_nav">
            <Sidebar />
          </div>

          <div id="layoutSidenav_content">
            <main>
              <Outlet /> // <-- no redirect now
            </main>
            <Footer />
          </div>
        </div>
      </div>
    </Fragment>
  );
}

...

export default function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route element={<Layout />}>
            <Route path="/admin/dashboard" element={<Dashboard />} />
          </Route>
          <Route path="*" element={<Navigate to="/admin/dashboard" replace />} />
        </Routes>
      </Router>
    </div>
  );
}

如果计划将其他路径呈现到布局路径中,则保持路径不变,并将重定向移动到索引路径.

export default function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route path="/admin" element={<Layout />}>
            <Route index element={<Navigate to="dashboard" replace />} />
            <Route path="dashboard" element={<Dashboard />} />
            ... other admin routes ...
          </Route>
        </Routes>
      </Router>
    </div>
  );
}

Javascript相关问答推荐

我想做一个程序,计算字符串中所有单词的数量

带对角线分隔符的图像滑动器

如何按预期聚合SON数据?

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

JS、C++和C#给出不同的Base 64 Guid编码结果

为什么getRecord()会因为与_logger相关的错误而失败?(使用Hedera SDK)

Angular:动画不启动

PrivateRoute不是路由组件错误

如何从URL获取令牌?

保持物品顺序的可变大小物品分配到平衡组的算法

PDF工具包阿拉伯字体的反转数字

NG/Express API路由处理程序停止工作

搜索功能不是在分页的每一页上进行搜索

在VS代码上一次设置多个变量格式

是否可以将异步调用与useState(UnctionName)一起使用

将相关数据组合到两个不同的数组中

如何使用抽屉屏幕及其子屏幕/组件的上下文?

Reaction useState和useLoaderData的组合使用引发无限循环错误

每隔3个项目交替显示,然后每1个项目交替显示

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?