You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js如何通过<Link to>传递id或props到其他组件获取专辑数据

React 专辑跳转传值实现方案

1. 调整 ListItem.jsx 跳转逻辑

原来的Link组件传参方式不符合React Router v6的规范,我们改为携带专辑ID跳转,避免页面刷新后数据丢失:

// ListItem.jsx 关键修改部分
return (
  {/* 跳转路径携带album.id参数 */}
  <Link to={`/itemPage/${album.id}`}>
    <div 
      className={"listItem"}
      style={{left: isHovered && index * 225 - 50 + index * 2.5}}
      onMouseEnter={() => setIsHovered(true)}
      onMouseLeave={() => setIsHovered(false)}
    >
      {album.id}
      {/* 其余原有代码保持不变 */}
    </div>
  </Link>
)

2. 修改 App.jsx 路由配置

新增动态路由参数albumId,用于接收跳转携带的专辑ID:

<Route path="/itemPage/:albumId" element={<ItemPage/>}/>

3. 重写 ItemPage.jsx 数据获取逻辑

在ItemPage中获取路由参数,请求对应专辑数据后传递给Cover组件:

import {useParams, useEffect, useState} from 'react'
import axios from 'axios'
import Navbar from './Navbar' // 按你实际文件路径调整
import Cover from './Cover' // 按你实际文件路径调整

const ItemPage = () => {
  // 获取路由中的专辑ID
  const {albumId} = useParams()
  const [currentAlbum, setCurrentAlbum] = useState({})
  const [lists, setLists] = useState([]);

  useEffect(() => {
    const getAlbumDetail = async () => {
      try{
        const res = await axios.get("/albums/find/" + albumId , {
          headers:{
            token: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxOThmM2YwNzdiYzI5ZTkyZTRlZDU5MCIsImlzQWRtaW4iOnRydWUsImlhdCI6MTYzODM2MzkyNSwiZXhwIjoxNjM4Nzk1OTI1fQ.LNyVCvxwCncOWhLS_uGAXBh-WX0GQffe3CeqcMzmZK4"
          },
        });
        setCurrentAlbum(res.data)
      } catch (e) {
        console.log(e)
      }
    }
    if(albumId) getAlbumDetail()
  },[albumId])

  return (
    <div className={"itemPage"}>
      <Navbar/>
      {/* 将获取到的专辑数据作为props传给Cover */}
      <Cover album={currentAlbum}/>
    </div>
  );
};
export default ItemPage

4. 调整 Cover.jsx 接收props渲染

Cover组件接收父组件传递的album参数,直接使用对应字段渲染即可:

// 组件入参接收album
const Cover = ({album}) => {
  return (
    <div className={"cover"}>
      <div className="coverImage">
        <img src={album.img} alt="专辑封面"/>
      </div>
      <div className="coverInfo">
        <Card>
          <CardContent>
            <Typography textAlign={"center"} gutterBottom variant="h5" component="div">
              {album.title}
            </Typography>
            <Typography variant="body2" color="white" textAlign={"center"} fontSize={150}>
              {album.rating}
            </Typography>
          </CardContent>
          {album.date} {album.title}
          <div className="cardImages"></div>
        </Card>
      </div>
      <Watch/>
      <Similiar/>
    </div>
  )
}
export default Cover

注意事项

  • 上述方案支持页面刷新后仍能正常加载对应专辑数据,比直接通过路由state传临时数据更稳定
  • 代码中写死的token建议后续放到axios全局拦截器中统一配置,避免重复编码

内容的提问来源于stack exchange,提问作者lorijames95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:05