如何使用 React Router Dom v6 导航子菜单项
how to navigate submenu items using React Router Dom v6
我正在创建一个包含带有子项的边栏的 React 应用程序。
我想打开并管理组件/ url (如 manage/sub1、manage/sub2)。
我试图在 /manage 中创建一个嵌套路由,但它再次重定向到 /manage。有什么办法吗?
const App = () => (
<div>
<Routes>
<Route path="/" element={<PublicRoute />}>
<Route path="login" element={<Login />} />
</Route>
<Route path="/" element={<PrivateRoute />}>
<Route path="dashboard" element={<Dashboard />} />
<Route path="manage" element={<Manage />} />
<Route path="sub1" element={<Sub1 />} />
<Route path="sub2" element={<Sub2 />} />
</Route>
</Routes>
</div>
);
我的侧边栏导航代码
<NavItem link="/manage" icon={HappinessIcon} label="Manage" hasSubItem>
<div>
<NavSubItem link="/sub1" label="Sub Item 1" />
<NavSubItem link="/sub2" label="Sub Item 2" />
</div>
</NavItem>
阅读 v6 文档后,我发现在这种情况下嵌套对我没有帮助。我只需要在所有子项前面添加管理/。
<Route path="manage/sub1" element={<Sub1 />} />
<Route path="manage/sub2" element={<Sub2 />} />
在我的侧边栏导航代码上
<NavItem link="/manage" icon={HappinessIcon} label="Manage" hasSubItem>
<div>
<NavSubItem link="/manage/sub1" label="Sub Item 1" />
<NavSubItem link="/manage/sub2" label="Sub Item 2" />
</div>
</NavItem>
这就是我要做的所有事情,如果您知道比这更干净的解决方案,请告诉我。
如果你想嵌套路由,你可以使用布局和索引路由的组合来完成它。
示例:
<Routes>
<Route element={<PublicRoute />}>
<Route path="/login" element={<Login />} />
</Route>
<Route element={<PrivateRoute />}>
<Route path="/dashboard/*">
<Route index element={<Dashboard />} />
</Route>
<Route path="/manage/*"> // layout to allow nested route matching
<Route index element={<Manage />} /> // "/mangage"
<Route path="sub1" element={<Sub1 />} /> // "/mangage/sub1"
<Route path="sub2" element={<Sub2 />} /> // "/mangage/sub2"
</Route>
</Route>
</Routes>
如果 Manage
组件呈现链接,它们可以是相对链接
<NavSubItem link="sub1" label="Sub Item 1" />
<NavSubItem link="sub2" label="Sub Item 2" />
否则,如果您要呈现来自单个组件的所有链接 in/at/near 根目录,那么您可能需要使用绝对链接。
<NavSubItem link="/manage/sub1" label="Sub Item 1" />
<NavSubItem link="/manage/sub2" label="Sub Item 2" />
相对链接和绝对链接的区别在于前导斜杠 "/"
字符。
我正在创建一个包含带有子项的边栏的 React 应用程序。
我想打开并管理组件/ url (如 manage/sub1、manage/sub2)。
我试图在 /manage 中创建一个嵌套路由,但它再次重定向到 /manage。有什么办法吗?
const App = () => (
<div>
<Routes>
<Route path="/" element={<PublicRoute />}>
<Route path="login" element={<Login />} />
</Route>
<Route path="/" element={<PrivateRoute />}>
<Route path="dashboard" element={<Dashboard />} />
<Route path="manage" element={<Manage />} />
<Route path="sub1" element={<Sub1 />} />
<Route path="sub2" element={<Sub2 />} />
</Route>
</Routes>
</div>
);
我的侧边栏导航代码
<NavItem link="/manage" icon={HappinessIcon} label="Manage" hasSubItem>
<div>
<NavSubItem link="/sub1" label="Sub Item 1" />
<NavSubItem link="/sub2" label="Sub Item 2" />
</div>
</NavItem>
阅读 v6 文档后,我发现在这种情况下嵌套对我没有帮助。我只需要在所有子项前面添加管理/。
<Route path="manage/sub1" element={<Sub1 />} />
<Route path="manage/sub2" element={<Sub2 />} />
在我的侧边栏导航代码上
<NavItem link="/manage" icon={HappinessIcon} label="Manage" hasSubItem>
<div>
<NavSubItem link="/manage/sub1" label="Sub Item 1" />
<NavSubItem link="/manage/sub2" label="Sub Item 2" />
</div>
</NavItem>
这就是我要做的所有事情,如果您知道比这更干净的解决方案,请告诉我。
如果你想嵌套路由,你可以使用布局和索引路由的组合来完成它。
示例:
<Routes>
<Route element={<PublicRoute />}>
<Route path="/login" element={<Login />} />
</Route>
<Route element={<PrivateRoute />}>
<Route path="/dashboard/*">
<Route index element={<Dashboard />} />
</Route>
<Route path="/manage/*"> // layout to allow nested route matching
<Route index element={<Manage />} /> // "/mangage"
<Route path="sub1" element={<Sub1 />} /> // "/mangage/sub1"
<Route path="sub2" element={<Sub2 />} /> // "/mangage/sub2"
</Route>
</Route>
</Routes>
如果 Manage
组件呈现链接,它们可以是相对链接
<NavSubItem link="sub1" label="Sub Item 1" />
<NavSubItem link="sub2" label="Sub Item 2" />
否则,如果您要呈现来自单个组件的所有链接 in/at/near 根目录,那么您可能需要使用绝对链接。
<NavSubItem link="/manage/sub1" label="Sub Item 1" />
<NavSubItem link="/manage/sub2" label="Sub Item 2" />
相对链接和绝对链接的区别在于前导斜杠 "/"
字符。