【发布时间】:2021-08-29 11:24:50
【问题描述】:
我尝试自己弄明白,搜索 StackOverflow,但我无法弄明白。
我解决了依赖性和另一个警告。
但是当我运行这段代码时,我的数据会自动添加下一页。
我认为这个问题是因为这段代码:
useEffect(() => {
fetchingNextMovie();
}, [fetchingNextMovie]); //if I make empty array, it is working fine. but I have an dependency warning.
我的代码是:
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>
);
}
【问题讨论】:
-
这是渲染循环,因为
fetchingNextMovie无条件更新movies,这是useCallback挂钩中的一个依赖项。你确定这是一个依赖错误,还是只是一个关于缺少依赖的 eslint 警告?您什么时候实际上希望fetchingNextMovie在useEffect挂钩中运行? -
对不起。这只是依赖警告。我可以忽略它吗?当我点击“加载更多”按钮时,我想要 fectingNextMovie
标签: reactjs react-hooks eslint use-effect