reactjs - React Router:如何有条件地渲染具有相同路由的不同组件
问题描述
如何使用 React 路由器渲染具有相同路由路径的不同组件,但 slug 输入类型不同(int vs string)?
<Switch>
<Route exact path={['/music/:category', '/products/:category']} component={List} />
<Route exact path="/products/:productId" component={Details} />
</Switch
/products/:category
当路径是slug 是字符串时,我想渲染 List 组件。:productId
当它的 slug是一个整数时,我还想使用相同的路径来呈现 Details 组件。
我在想这可能行得通,但事实并非如此。无论条件与否,这都会呈现详细信息组件。
{pathname.includes('/products') && typeof parseInt(pathname.split('/products/')[1]) === 'number'
? (
<Route exact path="/products/:id" component={Details} />
) : (
<Route exact path={['/music/:slug', '/products/:slug']} component={List} />
)}
谢谢!
解决方案
您可以使用 Route 的渲染道具来验证参数。
<Route
path="/products/:id"
render={({ match: { params: { id } } }) => {
if(isNaN(id) {
<Route exact path={['/music/:slug', '/products/:slug']} component={List} />
} else {
<Route exact path="/products/:id" component={Details} />
}
}}
/>
推荐阅读
- hyperlink - 超链接到当前文件夹中的文件,无论其在驱动器上的位置如何
- json - 有什么方法可以操纵 CORS api http 请求(正文)以获取所需的响应
- flutter - Flutter 应用程序中等待 http 响应后的行不执行
- google-sheets - vlookup 一个值,如果它在某个日期之后返回
- tcp - 我们是否根据情况切换拥塞控制协议?
- reactjs - Socket.io 客户端未与服务器 React 和 Express 连接
- javascript - 如果按钮单击 3 次,则执行操作 [javascript]
- javascript - 文本/图像 Phaser 3 渲染问题
- javascript - 格子链接令牌集成
- firebase - Flutter firebase 流重启崩溃