My Problem
I'm trying to make this Netflix Clone by a YouTube called Clever Programmer. I'm trying to use an API called TMDB to display movies. However, whenever I try to display the movies the data seems to be the same. I'm not getting any error messages except for one that's in the console.
Failed to load resource: the server responded with a status of 404 ()
The top of the page (which is normal)
Bottom of the page (where my problem is)
I've tried refreshing the page and restarting the app but I got the same results.
Code
App.js
import "./App.css";
import Row from "./Row";
import requests from "./requests";
import Banner from "./Banner";
function App() {
return (
<div className="App">
{/* Nav */}
<Banner></Banner>
<Row
title="NETFLIX ORIGINALS"
fetchUrl={requests.fetchNetflixOriginals}
isLargeRow={true}
/>
<Row title="Trending Now" fetchUrl={requests.fetchTrending} />
<Row title="Top Rated" fetchUrl={requests.fetchTopRated} />
<Row title="Action Movies" fetchUrl={requests.fetchTopActionMovies} />
<Row title="Comedy Movies" fetchUrl={requests.fetchTopComedyMovies} />
<Row title="Horror Movies" fetchUrl={requests.fetchTopHorrorMovies} />
<Row title="Romance Movies" fetchUrl={requests.fetchTopRomanceMovies} />
<Row title="Documentarires" fetchUrl={requests.fetchTopDocumentaries} />
</div>
);
}
export default App;
Banner.js
import React, { useState, useEffect } from "react";
import axios from "./axois";
import requests from "./requests";
function Banner() {
const [movie, setMovie] = useState([]);
useEffect(() => {
async function fetchData() {
const request = await axios.get(requests.fetchNetflixOriginals);
setMovie(
request.data.results[
Math.floor(Math.random() * request.data.results.length - 1)
]
);
}
fetchData();
}, []);
console.log(movie);
return (
<header
className="banner"
style={{
backgroundSize: "cover",
backgroundImage: `url(https://image.tmdb.org/t/p/original/${movie?.backdrop_path})`,
backgroundPosition: "center center",
}}
>
<div className="banner_contents">
{/* title */}
<h1>{movie?.title || movie?.name || movie?.original_name}</h1>
{/* div > 2 buttons */}
{/* description */}
</div>
</header>
);
}
export default Banner;
Row.js
import React, { useState, useEffect } from "react";
import axios from "./axois";
import "./Row.css";
const base_url = "https://image.tmdb.org/t/p/original/";
function Row({ title, fetchUrl, isLargeRow }) {
const [movies, setMovies] = useState([]);
// A snipet of caode which runs based on a specific condition/variable
useEffect(() => {
async function fetchData() {
const request = await axios.get(fetchUrl);
setMovies(request.data.results);
return request;
}
fetchData();
}, [fetchUrl]);
return (
<div className="row">
{/* title */}
<h2>{title}</h2>
<div className="row_posters">
{/* serveral row_poster(s) */}
{movies.map((movie) => (
<img
key={movie.id}
className={`row_poster ${isLargeRow && "row_posterLarge"}`}
src={`${base_url}${
isLargeRow ? movie.poster_path : movie.backdrop_path
}`}
alt={movie.name}
/>
))}
</div>
{/* container -> posters */}
</div>
);
}
export default Row;
Requests.js
const APIKEY = "not sure how confidential an API key is";
const requests = {
fetchTrending: `/trending/all/week?api_key=${APIKEY}&language=en-US`,
fetchNetflixOriginals: `/discover/tv?api_key=${APIKEY}&with_networks=213`,
fetchTopRated: `/movie/top_rated?api_key=${APIKEY}&language=en-US`,
fetchTopActionMovies: `/discover/movie?api_key=${APIKEY}&with_geners=28`,
fetchTopComedyMovies: `/discover/movie?api_key=${APIKEY}&with_geners=35`,
fetchTopHorrorMovies: `/discover/movie?api_key=${APIKEY}&with_geners=27`,
fetchTopRomanceMovies: `/discover/movie?api_key=${APIKEY}&with_geners=10749`,
fetchTopDocumentaries: `/discover/movie?api_key=${APIKEY}&with_geners=99`,
};
export default requests;
Axios.js
import axios from "axios";
// base url to make requests to the movie database
const instance = axios.create({
baseURL: "https://api.themoviedb.org/3/",
});
export default instance;

