reactjs - 如何在 React Router v6 中根据路由更改或参数创建动态子标题?
问题描述
在 React Router v6 中,我正在尝试创建一个动态的SubHeader组件,该组件会根据特定的路由或路由参数进行更改。对于上下文,这是一个人为的设置:
export const App = () => {
return (
<BrowserRouter>
<Header>
<TopHeader />
<DynamicSubHeader /> // <-- here
</Header>
<Routes>
<Route path="products" element={<Products />} />
<Route path='product/:id/*' element={<ProductDetail />} >
<Route path="price" element={<ProductDetailPrice />} />
</Route>
</Routes>
</BrowserRouter>
)
}
我想<DynamicSubHeader />
在之间导航时更新不同的内容/products
,/products/:id
甚至/products/:id/price
在里面<DynamicSubHeader />
,我尝试使用 提供的useParam钩子react-router-dom
,但它只是返回 null 或数据不持久。似乎你只能在嵌套在组件内时使用useParam 。<Routes>
我也尝试使用useLocation挂钩来监听路由更改并在那里手动设置状态,但它也不会持续存在。
目前,我已将其视为放置在每条路线中<Header />
的Layout组件。我用错了 React Router 吗?否则,有关如何解决此问题的任何建议?
解决方案
要访问您的 URL 数据,请尝试使用组件内部的match
对象。this.props.match
<DynamicSubHeader />
这是它在示例编辑路线上的外观:
//$> console.log(this.props.match)
{
isExact: true
params:
id: "5tkd6w"
__proto__: Object
path: "/streams/edit/:id"
url: "/streams/edit/5tkd6w"
__proto__: Object
}
获得 id 后,您几乎可以执行任何操作,并且通过获取完整的 URL,您可以确定子标题内容的其他部分。
推荐阅读
- android - React-Native:如何在 Android 中访问 react-native 应用程序的权限?
- arrays - VBA Excel:如何通过函数将值分配给数组中的空槽
- android - 可关闭小部件的边框拖动端
- java - 用嵌入式数据库替换真实数据源进行测试
- cors - 当我尝试使用 Fetch from React 进行 POST 时,Cors 阻止了错误 403
- elixir - 使用 Phoenix 应用程序监控文件系统(文件创建)
- vue.js - 无法使用动态 Vuex 存储数据填充 VueJS 日历插件的数据数组
- mysql - 存储过程在 localhost 中有效,但在服务器中无效
- swift - 尝试在 SwiftUI 中的 UIViewRepresentable 中将 HTML 转换为 AttributedString
- php - 无法为命名路由“参与者”生成 URL,因为此类路由不存在