key
값 사용results: [
{
adult: false,
backdrop_path: "/dKqa850uvbNSCaQCV4Im1XlzEtQ.jpg",
genre_ids: [
9648,
53,
35
],
id: 661374,
original_language: "en",
original_title: "Glass Onion: A Knives Out Mystery",
overview: "World-famous detective Benoit Blanc heads to Greece to peel back the layers of a mystery surrounding a tech billionaire and his eclectic crew of friends.",
popularity: 6664.718,
poster_path: "/vDGr1YdrlfbU9wxTOdpf3zChmv9.jpg",
release_date: "2022-11-23",
title: "Glass Onion: A Knives Out Mystery",
video: false,
vote_average: 7.1,
vote_count: 1966
},
.
.
.
]
스와이퍼에 현재 상영작을 보여줄 용도이므로 Movies 탭에서 Get Now Playing을 선택했다. 이 중에서 backdrop_path
, id
, overview
, poster_path
, title
, vote_average
만을 가져와 사용할 예정이다.
const Movies = ({ navigation: { navigate } }) => {
const [nowPlayings, setNowPlayings] = useState([]);
const [loading, setLoading] = useState(true);
const BASE_URL = "https://api.themoviedb.org/3/movie";
const API_KEY = "(발급받은 API키)";
const getNowPlayings = async () => {
const { results } = await fetch(
`${BASE_URL}/now_playing?api_key=${API_KEY}&language=ko&page=1`
).then((res) => res.json());
setNowPlayings(results);
setLoading(false);
};
useEffect(() => {
getNowPlayings();
}, []);
// 데이터 로딩
if (loading) {
return (
<Loader>
<ActivityIndicator />
</Loader>
);
}
// 데이터 로딩이 끝나면 실행
return (
<ScrollView>
<Container>
<Swiper height="100%" showsPagination={false} autoplay={true} loop>
{nowPlayings.map((movie) => (
<SwiperMovie>
<SwiperScreenShot
source={{
uri: getImgPath(movie.backdrop_path),
}}
/>
<LinearGradient
style={StyleSheet.absoluteFill}
colors={["transparent", "rgba(0,0,0,0.2)", "black"]}
/>
<SwiperMovieExplanation style={StyleSheet.absoluteFill}>
<SwiperPoster
source={{
uri: getImgPath(movie.poster_path),
}}
/>
<SwiperMovieInfo>
<SwiperMovieTitle>{movie.title}</SwiperMovieTitle>
<SwiperMovieRating>
<FontAwesome name="star" size={16} color="#ffd900" />
{movie.vote_average}/10.0
</SwiperMovieRating>
<SwiperMovieDesc numberOfLines={4}>
{movie.overview}
</SwiperMovieDesc>
</SwiperMovieInfo>
</SwiperMovieExplanation>
</SwiperMovie>
))}
</Swiper>
</Container>
.
.
.
</ScrollView>
BASE_URL
과 API_KEY
로 활용useEffect
로 렌더링시 데이터 조회이미지 가져오기
API의 이미지를 사용할 때는
key
값 이외에도 베이직 경로가 필요하다. 이 역시 공식문서에서 확인이 가능하다. 해당 경로에서 마지막 슬래시까지가 베이직 경로에 해당한다.export const getImgPath = (path) => { return `https://image.tmdb.org/t/p/w500/${path}`; };
Movies 페이지에서도 바로 사용할 수 있지만 간결한 코드를 위해 util.js에서 경로를
export
하는 방식으로 사용했다.