我这里有这个函数,可以从pokeAPI获取数据,但我想将IsLoading状态设置为真,直到所有卡都渲染完毕.我下面所做的事情有时似乎有效,有时却无效.我是新手,所以我不太确定该问什么以及需要什么更多信息,所以请告诉我.
useEffect(() => {
setIsLoading(true);
async function fetchAllPokemonData() {
try {
if (search) {
const res = await fetch(`https://pokeapi.co/api/v2/pokemon/${search}`);
const data = await res.json();
setData([]);
setData([data]);
} else {
for (let i = 0; i < pokemon.length; i++) {
const res = await fetch(pokemon[i].url);
const data = await res.json();
setData((prev) => [...prev, data]);
if (filter) {
setData((data) =>
data.filter((item) =>
item.types.some((type) =>
type.type.name === filter)));
}
}
}
} catch (error) {
console.log(error);
} finally {
setIsLoading(false);
}
}
fetchAllPokemonData();
}, [pokemon, search, filter]);
try 使用try、catch和finally,但它有时有效,有时它只是立即或在没有生成所有卡时将isLoading设置回假.