I try to figure it out by myself and search StackOverflow, but I could not figure it out.
I solved dependency and another warning.
But when I run this code, my data keep adding the next pages automatically.
I think this problem is because of this code:
useEffect(() => {
fetchingNextMovie();
}, [fetchingNextMovie]); //if I make empty array, it is working fine. but I have an dependency warning.
my code is:
export default function Mainpage() {
const [movies, setMovies] = useState([]);
const [search, setSearch] = useState("");
const [number, setNumber] = useState(1);
const API = process.env.REACT_APP_API_KEY;
const movie = `https://api.themoviedb.org/3/search/movie?api_key=${API}&language=en_US&page=${number}&query=${search}`;
const popularMovie = `https://api.themoviedb.org/3/movie/popular?api_key=${API}&language=en-US&page=${number}`;
const fetchdata = useCallback(async () => {
let curURL = ``;
if (search === "") {
curURL = popularMovie;
} else {
curURL = movie;
}
const res = await axios.get(curURL);
const data = res.data;
return data;
}, [movie, popularMovie, search]);
const savedHeight = document.body.offsetHeight;
const fetchingNextMovie = useCallback(() => {
fetchdata().then((randomData) => {
const newMovies = [...movies, ...randomData.results];
setMovies(newMovies);
window.scrollTo(0, savedHeight);
// setTotalPage(randomData.total_pages);
setNumber(randomData.page + 1);
});
}, [fetchdata, movies, savedHeight]);
useEffect(() => {
fetchingNextMovie();
}, [fetchingNextMovie]);
const onClick = () => {
fetchingNextMovie();
};
return (
<div>
<Search setSearch={setSearch} />
<MovieComponent movies={movies} />
{/* <Paging setNumber={setNumber} totalPage={totalPage} /> */}
<div className="loadButton" style={{ marginTop: "20px" }}>
<button onClick={onClick}>Load More</button>
</div>
</div>
);
}