javascript - 如何使用react router dom显示详细信息页面

我使用路由在页面之间切换。 我有 App.js,其中有我的导航栏和路线。

这些是我遇到问题的路线:

<Route path='/catalog' exact component={() => <Catalog data={data}/>} />
<Route path='/auction' exact component={() => <Auction data={data} />} />  

一旦你点击其中任何一个,它就会显示一个汽车列表(拍卖和目录) 这些组件有一个接收 Prop (数据)的公共(public)子组件。在这个 CarItem 中,我们有 CarDetails 组件,它必须渲染每个汽车项目的细节。 问题是 CarDetails 不起作用( 问题 - 传递的 Prop 未定义。

这是 CarItem 组件,我在其中链接到 CarDetails 页面并创建路线。 或者我应该把这条路线放在 App.js 上???

const CarItem = (data) => {
     {data.data.data.map(item => {
                         return(
                             <>
                            <img src={imageCar} className='img-feature'/>              
                                <h5 className='bold'>{item.name}</h5>
                                <h5 className='color-yellow'>$ {item.price}</h5>
                             
         <Link  className='btn-item auction-btn mr-2' to={`/carDetails/${item.id}`}>Details</Link>
   </div>  
    <Route exact path={`/carDetails/:id`} render={({match}) => (
    <CarDetails item={data.find(item => item.id === match.params.id)}/>  )}
     />
        </>
                    

这是 CarDetails 组件:

const CarDetails = ({item}) => {
   console.log(item, ' for car details')

   
   const { id } = props.match.params
  

    return (
     
       <h4 className='text-dark'>{item.name}</h4>
)
}

最佳答案

您应该在一个地方声明所有顶级路线,包括用于CarDetails 的路线:

<Route path="/catalog" exact component={() => <Catalog data={data} />} />
<Route path="/auction" exact component={() => <Auction data={data} />} />
<Route
  exact
  path="/carDetails/:id"
  render={({ match }) => (
    <CarDetails item={data.find((item) => String(item.id) === String(match.params.id))} />
  )}
/>

并使用如下链接重定向到 CarDetails 组件:

<Link className="btn-item auction-btn mr-2" to={`/carDetails/${item.id}`}>
  Details
</Link>

https://stackoverflow.com/questions/66796092/

相关文章:

firebase - 在 Flutter 中使用相同的 Firebase 将同一应用程序中的用户和卖

python-3.x - 根据索引和标签转换数据框

heroku - Unresolved 导入 `core::task::Wake`

c# - 添加新包会破坏 .NET 5 应用程序

c - 这个 C 函数是什么意思?函数指针?

qt - 如何将 QML 文件组织到嵌套文件夹中?

go - 为什么在地址上取消引用会在 golang 中产生 "invalid indirect"错误

delphi - GDI+ DrawLine 什么都不画

ios - 如何将十六进制数据分解为来自 BLE 设备的可用数据? (速度和节奏)

r - 如何在 Apple Silicon (M1) Mac 上安装 RcppArmadillo