【发布时间】:2022-01-05 18:03:20
【问题描述】:
所以我正在创建一个电影网站,用户可以在其中搜索电影,然后单击卡片以获取有关电影的更多详细信息。我无法获取影片的详细信息部分以转到详细信息页面。我有一个onclick,用于使用已经存在movieresults.id 的电影ID 从api 中提取电影的详细信息。我在电影卡的图像部分有一个NavLink,这是用户单击的位置,它将转到显示电影详细信息的详细信息页面,但我正在努力将这些数据获取到该页面。
任何帮助将不胜感激。
卡片组件
import React, {useState} from 'react'
import placeholder from '../Assets/Placeholder.jpg'
import {Button, Alert, Nav, Row, Col} from 'react-bootstrap'
import '../sass/custom.scss'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faStar, faPlay, faHeart, faShare } from '@fortawesome/free-solid-svg-icons'
import {NavLink} from 'react-router-dom';
import { FilmPage } from './FilmPage'
export const MovieCard = ({movieresults}) => {
const [trailer, setTrailer] = useState();
const [content, setContent] = useState([]);
const onClick = e => {
fetch(`https://api.themoviedb.org/3/movie/${movieresults.id}?api_key=${process.env.REACT_APP_TMDB_KEY}&language=en-US`)
.then((res) => res.json())
.then((data) => {
if (!data.errors) {
console.log(data)
setContent(data);
}else{
<Alert variant="danger">Error</Alert>
}
})
}
fetch(`https://api.themoviedb.org/3/movie/${movieresults.id}/videos?api_key=${process.env.REACT_APP_TMDB_KEY}&language=en-US`)
.then((res) => res.json())
.then((data) => {
if (!data.errors) {
setTrailer(data.results[0]?.key);
}else{
<Alert variant="danger">Error</Alert>
}
})
return (
<div className="movie-card">
<div className="poster-container">
<span className="rating translate-middle rounded-pill">
<FontAwesomeIcon icon={faStar} className="star"/>
{movieresults.vote_average}
</span>
{movieresults.poster_path ? (
<Nav.Link as={NavLink} exact={true} to={{pathname:"/film", state: content }} className="poster-link" >
<img className="poster"
src={`https://image.tmdb.org/t/p/w300${movieresults.poster_path}`}
alt= {movieresults.title}
/>
</Nav.Link>
) : (
<img className="poster"
src={placeholder}
alt= {movieresults.title}
/>
)}
</div>
<div className="content-container">
<b className="title mobile-text">{movieresults.title}</b>
<p className="desc mobile-text">{movieresults.release_date}</p>
<div className="card-btn">
<Button className="btn btn-secondary watch-btn" target="__blank" href={`https://www.youtube.com/watch?v=${trailer}`}><FontAwesomeIcon icon={faPlay} /> Trailer</Button>
<div className="icons">
<a href className="icon-btn"><FontAwesomeIcon icon={faHeart} onClick={onClick}/> </a>
<a href className="icon-btn"><FontAwesomeIcon icon={faShare} /> </a>
</div>
</div>
<div key={content.id}>
<h3 className="title">{content.title}</h3>
</div>
</div>
</div>
)
}
电影页面组件
import React from 'react'
import { Container } from 'react-bootstrap';
export const FilmPage = ({content}) => {
return (
<Container>
<h1>Film Page</h1>
<h1>{content.id}</h1>
</Container>
)
}
【问题讨论】:
-
这能回答你的问题吗? Passing Data between react components
-
@RandyCasburn 我将如何在我的代码中实现它?
-
阅读、理解和实施我为您链接的文档中讨论的概念。再次在这里,以防您错过:reactjs.org/docs/lifting-state-up.html
-
@DrewReese
cineflex@0.1.0 /Users/imad/repos/CHT2531_FE/cineflex └── react-router-dom@5.3.0
标签: javascript reactjs react-router