我正在寻找有关此客户React挂钩的反馈。我想知道:
<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 };
答案 0 :(得分:1)
您的useFetchMovies
似乎是正确的,期望部分不会在typeOfMovies
更改时获取新数据,因为当useEffect首次在组件安装时运行时,它将引用fetchMoviesData
它最初是与它的关闭一起创建的,并且当再次调用useFetchMovies
钩子时,将创建一个useEffect
未引用的新函数。
为了正确输入单词,您应该像以下那样将typeOfMovies
作为第二个参数传递给useEffect
useEffect(() => {
fetchMovieData();
}, [typeOfMovies]);