reactjs - React Router v6 - 没有 Outlet 的嵌套路由
问题描述
我正在使用 react-router v6,是否可以在不使用 Outlet 组件的情况下使用嵌套路由?
例如:我有一个用户页面和 onClick 用户组件,它应该导航到特定的用户页面,
当前尝试:
<Routes>
<Route path="/" element={<Home />} />
<Route path="/users" element={<Users />} />
<Route path=":id" element={<UserPage/>} />
</Routes>
并单击特定用户:
const gotoUserPage = () => {
navigate('1')
}
gotoUserPage 将 URL 从“/users”更改为“/users/1”,但 userPage 组件不呈现。
解决方案
使用<Outlet/>
组件有什么问题?它告诉 React Router 在哪里渲染,<UserPage/>
所以没有它,页面就没有地方可以渲染,正如预期的那样。
如果您想知道如何呈现页面而不是页面的子<Users/>
页面,那么您可以尝试以下操作:
<Routes>
<Route path="/" element={<Home />} />
<Route path="users" element={<Outlet />} />
<Route path="/" element={<Users />} />
<Route path=":id" element={<UserPage />} />
</Routes>
确实有时需要一个完全不同的组件,但在大多数情况下,组件共享某些组件,例如导航栏和容器。如果在 Users 和 UserPage 组件中都有导航栏,那么您可能需要考虑从两者中重构它,并将其放在具有导航栏和 Outlet 的父组件中。这将有助于在您扩展时管理组件。
推荐阅读
- typescript - 将 typescript 类型转换为 proto 文件
- python - 如何在 RF 中获取特征重要性
- bash - Bash/sed - 在变量中使用 sed
- database - 扫描 AWS DynamoDB 的替代方法?
- ruby - Ruby URI:使用“param[]=value”为数组参数构建 URI
- angular - 如何向 Angular Unviersal 项目添加额外的 Firebase 云功能
- perl - Perl 重复字符串,它具有重复的子字符串
- android - Android,直接从扬声器录制/流式传输
- android - Flutter iOS中的匿名身份验证错误
- java - Keycloak Java Adapter 属性“public-client”是什么意思?