我有一个异步函数,它从API中获取数据,但是当我使用数据时,它会得到一个类型错误:未定义电影数组。但是我使用“&&”告诉它,如果它是空的,那么不要执行块,但是它仍然会给出错误。我也用三元运算符做过,但是还是一样。
下面是从API获取数据的使用效果钩子
const [movies, setMovies] = useState([])
useEffect(() => {
async function fetchData() {
const request = await axios.get(fetchUrl);
setMovies(request.data.results);
console.log(movies);
return request;
}
fetchData();
}, [fetchUrl]);
下面是该元素的代码
{movies &&
<div id="film-row">
<FilmCard img={`${base_url}${movies[0].poster_path}`} />
<FilmCard img={`${base_url}${movies[1].poster_path}`} />
<FilmCard img={`${base_url}${movies[2].poster_path}`} />
<FilmCard img={`${base_url}${movies[3].poster_path}`} />
<FilmCard img={`${base_url}${movies[4].poster_path}`} />
<FilmCard img={`${base_url}${movies[5].poster_path}`} />
</div>
}
4条答案
按热度按时间rekjcdws1#
添加一个
?
到你的标签,如下所示或将条件渲染更改为:
{电影.长度&&
ep6jt1vc2#
很坚韧记住JavaScript将哪些值强制为true或false,在这种情况下,空数组([])实际上是一个“真实”值(see MDN for examples),因此FilmCard元素将呈现为不需要的。
更改条件以说明这一点:
或者将
movies
初始化为“falsy”值:uqcuzwp83#
我确实是这样获取数据的:
并且你应该检查movies是否不为空。在返回的add中
iih3973s4#
对象在响应之前被读取。当你可以使用“then”时,为什么要使用async wait呢?
更多关于这个主题的信息:https://axios-http.com/docs/api_intro