// src > App.js
import { Container, GlobalStyle } from "./App.styled.js";
import Banner from "./components/Banner.js";
import Nav from "./components/Nav";
import Category from "./components/Category";
import Row from "./components/Row";
import requests from "./api/requests.js";
function App() {
return (
<>
<GlobalStyle />
<Container>
<Nav />
<Banner />
<Category />
<Row
title="Trending Now"
id="TN" fetchURL={requests.fetchTrending} />
<Row
title="Top Rated"
id="TR" fetchURL={requests.fetchTopRated} />
<Row
title="Action Movies"
id="AM"
fetchURL={requests.fetchActionMovies}
/>
<Row
title="Comedy Movies"
id="CM"
fetchURL={requests.fetchComedyMovies}
/>
</Container>
</>
);
}
export default App;
React Hook useEffect has a missing dependency: 'fecthMovieData'. Either include it or remove the dependency array.
컴포넌트가 랜더링 될 때, 리액트는 컴포넌트 내 함수를 기억하고 DOM 없데이트를 수행 한 이후 호출하게 된다.
(dependency)으로 설정한다.
import React, { useState, useEffect, useCallback } from "react";
import { axiosInstance } from "../api/axios";
import requests from "../api/requests";
const Row = ({ title, id, fetchUrl }) => {
const [movies, setMovies] = useState([]);
// 2) fecthMovieData 변경 -> useEffect 호출
useEffect(() => {
fecthMovieData();
}, [fecthMovieData]); /* 'fecthMovieData' was used before it
was defined.eslintno-use-before-define */
// 1) fetchUrl 변경 -> useCallback() -> fecthMovieData 변경
const fecthMovieData = useCallback(async () => {
const axiosReq = await axiosInstance.get(fetchUrl);
console.log("axiosReq", axiosReq);
setMovies(axiosReq.data.results);
}, [fetchUrl]);
return <div>Row</div>;
};
export default Row;
import React, { useState, useEffect, useCallback } from "react";
import { axiosInstance } from "../api/axios";
import requests from "../api/requests";
const Row = ({ title, id, fetchUrl }) => {
const [movies, setMovies] = useState([]);
const fecthMovieData = useCallback(async () => {
const axiosReq = await axiosInstance.get(fetchUrl);
console.log("axiosReq", axiosReq);
setMovies(axiosReq.data.results);
}, [fetchUrl]);
useEffect(() => {
fecthMovieData();
}, [fecthMovieData]);
return <div>Row</div>;
};
export default Row;