React Router v6 共享布局

Ica*_*ruk 14 router reactjs react-router

阅读路线布局后,我想用布局包装路线的一些元素,但让其他元素没有布局。

这是示例:

应用程序.jsx

import React from 'react';
import { Routes, BrowserRouter, Route } from 'react-router-dom';

export default function App() {
  return (
    <div>
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<p>Home</p>} />

          <Route element={<div style={{ background: 'red' }} />}>
            <Route path="/login" element={<p>Login</p>} />
          </Route>
        </Routes>
      </BrowserRouter>
    </div>
  );
Run Code Online (Sandbox Code Playgroud)

当我转到时,/我可以看到文本“Home”,它没有布局。
但是,当我不进行/login任何渲染时,它应该渲染包裹文本“登录”的红色背景布局。

这是一个实时代码沙箱: https://stackblitz.com/edit/github-hwpla5 ?devtoolsheight=33&file=src/App.jsx

我做错了什么?
谢谢

aei*_*eid 35

您必须<Outlet />在布局元素内渲染 for 来指定应安装活动子路由的位置。

<Routes>
  <Route path="/" element={<p>Home</p>} />
  <Route element={<div style={{ background: 'red' }} > <Outlet /> </div>}>
    <Route path="/login" element={<p>Login</p>} />
  </Route>
</Routes>

Run Code Online (Sandbox Code Playgroud)

  • @lcaruk我不认为你误解了。我一直在努力解决这个问题,直到最后我找到了这条线索。除了缺少对“&lt;Outlet /&gt;”的明确解释之外,我认为文档还通过声明“&lt;App /&gt;”将被渲染来误导读者,而事实证明它不会。 (5认同)
  • 非常感谢,它有效。https://reactrouter.com/docs/en/v6/getting-started/concepts#layout-routes 上的示例不使用插座。也许我误解了。 (4认同)
  • 同样在这里。文档的这一部分真的很糟糕。我应该举一个“布局”组件的例子。我正在考虑寻找另一个图书馆。他们失去了我的信任 (2认同)