我正在寻找有关此客户 React 钩子的反馈。我想知道:
- 这看起来像是自定义 React 钩子的正确使用吗?
- 有没有更好的方法可以根据传入的道具在不同的 API 端点之间切换?我想做这样的事情:
<MovieGrid typeOfMovies={"popular"} />
and
<MovieGrid typeOfMovies={"upcoming"} />
- 您对看到的任何内容有任何反馈或建议吗?谢谢!
我提供的代码确实有效。但是由于钩子相对较新,我并不完全有信心我是否正确使用它们。
这是我得到的:
import React, { useState, useEffect } from "react";
function useFetchMovies(typeOfMovies) {
const [movieData, setMovieData] = useState([]);
const movieEndpointURL = () => {
if (typeOfMovies === "upcoming") {
return `https://api.themoviedb.org/3/movie/upcoming?api_key={API_KEY}&language=en-US&page=1®ion=US`;
} else if (typeOfMovies === "popular") {
return `https://api.themoviedb.org/3/movie/popular?api_key={API_KEY}&language=en-US&page=1®ion=US`;
}
};
const fetchMovieData = async () => {
try {
const res = await fetch(movieEndpointURL());
const movies = await res.json();
setMovieData(movies.results);
console.log(movies.results);
} catch (err) {
console.log(err);
}
};
useEffect(() => {
fetchMovieData();
}, []);
return [movieData, setMovieData];
}
export { useFetchMovies };
您的useFetchMovies
似乎是正确的,期望当typeOfMovies
更改时不会获取新数据的部分,因为当 useEffect 首次在组件挂载上运行时,它将引用最初创建fetchMoviesData
及其闭包,当再次调用useFetchMovies
钩子时,将创建一个未被useEffect
引用的新函数。
为了使它正确单词,您应该将typeOfMovies
作为第二个参数传递给useEffect
useEffect(() => {
fetchMovieData();
}, [typeOfMovies]);