3 回答
TA贡献1868条经验 获得超4个赞
您应该使用使用异步结果设置的状态,而不是改变top100Array(然后由于.then某种原因从)返回它,从而强制重新渲染。用于等待每次提取完成。Promise.all
const [results, setResults] = useState();
const getData = i => fetch(dataUrlNoPage + i)
.then((res) => res.json())
.then((data) => {
if (data.errors) {
console.log(data.errors);
throw new Error(data.errors);
}
return data.results;
// Retrieve results only once, on mount:
useEffect(() => {
Promise.all(
Array.from({ length: 5 }, (_, i) => getData(i + 1))
)
.then((allResults) => {
setResults(allResults.flat());
})
.catch(handleErrors);
}, []);
然后渲染它:
<ul className="results">{results ? listItems(results) : null}</ul>
将 替换JSON.stringify为您想要将结果数组转换为 JSX 元素的值。(也许你想要results.map(result => <span>result.title</span>),或者类似的东西)
TA贡献1801条经验 获得超8个赞
不确定返回什么并且 for 循环不是最优的,但你不妨直接在 jsx 中映射
<ul className='results'>
{top100Array.map((movie) => (
<li key={movie.id}>
<TopListCard movie={movie} />
</li>
))}
</ul>
添加回答
举报