Fetch Data

axios

npm i axios
// src/axios.js

import axios from "axios";

const instance = axios.create({
  baseURL: "https://api.themoviedb.org/3",
});

export default instance;

Environment Variables

REACT_APP_API_KEY=<<TMDb_API_KEY>>
// src/requests.js

const requests = {
  fetchTrending: `/trending/all/week?api_key=${process.env.REACT_APP_API_KEY}&language=en-US`,
};

export default requests;

useEffect Hook

// src/App.js

...
import Banner from "./Banner";
import requests from "./requests";

const App = () => {
  return (
    <div>
      ...
      <Banner fetchUrl={requests.fetchTrending} />
    </div>
  );
};

export default App;
// src/Banner.js

import { useEffect, useState } from "react";
import axios from "./axios";

const Banner = ({ fetchUrl }) => {
  const [movies, setMovies] = useState([]);

  useEffect(() => {
    fetchData();
  }, []);

  async function fetchData() {
    const response = await axios.get(fetchUrl);
    console.log(response);
    setMovies(response.data.results);
  }

  return <div>Banner</div>;
};

export default Banner;
// src/Banner.js

const Banner = () => {
  ...
  const [randomMovie, setRandomMovie] = useState(null);

  ...
  useEffect(() => {
    if (movies.length > 0) {
      getRandomMovie();

      const timer = setInterval(() => {
        getRandomMovie();
      }, 10 * 1000);

      return () => clearInterval(timer);
    }
  }, [movies]);

  function getRandomMovie() {
    const randomMovie = movies[Math.floor(Math.random() * movies.length)];
    console.log(randomMovie);
    setRandomMovie(randomMovie);
  }
  ...
}