reactjs - React-router 将错误的组件与类似的匹配匹配
问题描述
所以我正在开发一个反应应用程序,并有反应路由器库在我的应用程序中显示不同的可能 URL。我有以下内容routes
,根据 URL 定义将呈现哪个组件:
<Route path={`/products/:address/:page`} component={Products} />
<Route path={`/products/:productId`} component={ProductDetails} />
<Route render={() => <NotFound/>}/>
第一个期望是这样/products/store/1
的:匹配产品并显示产品页面。
第二个期望是这样/products/5e996d123e1e0816242aed80
的:并显示产品详细信息。
第三个是后备 UI,如果没有匹配项
我的问题是,如果我在第一个 URL 中并删除页面 (1),例如/products/store/
,反应路由器会感到困惑并尝试匹配第二个路由。
在这两个组件中,我componentDidMount
像这样加载参数:
this.props.match.params.address
对于this.props.match.params.page
第一个组件和this.props.match.params.address
第二个组件。
理想情况下,如果第一条路线的第二个参数不存在,我想渲染第三条路线。
一种可能的解决方案是将 2nd Route 从 更改/products/:productId
为/product/:productId
,这样就不会混淆。
有没有更好的解决方案?
解决方案
推荐阅读
- java - 如何选择已经创建的随机真布尔变量?
- c++ - 如何避免在 C++17 中使用 lambda 捕获?
- scala - 如何检查一行的多列值是否不为空,然后在 Spark Scala 中添加一个真/假结果列
- azure-service-fabric - 我们如何在 Service Fabric Actor Reliable 服务中添加 Application Insight
- c# - 事务不锁定整个表ef core c#
- html - 使用'flex'将'Form'中的按钮定位在不同的div下
- javascript - 使用 z-index 属性在单个拖放元素中堆叠多个文本元素
- sql - 如何用雪花中的空格替换包含字母和特殊字符的行
- vue.js - Vue.js 与少数组件文件同时工作
- android - 导航组件:从 Viewpager 中的 Fragment 导航到另一个 Fragment