【发布时间】:2021-03-21 12:07:35
【问题描述】:
我正在学习 react 并尝试使用 football-data API 编写前 5 名联赛的足球排名,但出现了一个奇怪的问题。
我读到每次状态改变时,都会调用 render() 。在我的代码中,从 API 获取数据后不会调用 render()。
getAllStandings() 方法在开始时被调用,对于competitionsIds 数组中的每个competitionId,它都会获取排名。在迭代每个 id 之后,状态会更新并且应该调用 render() 方法,但它没有。 render() 方法中的变量为空。
也许是因为异步功能?
这是我的代码(getAllStandings() 在 componentDidMount() 方法中被调用):
getAllStandings(){
let list = [];
let competitions = this.state.competitionsIds; // [1,2,3,4,5]
console.log("Competitions: ", competitions);
competitions.forEach((item, i) => {
this.getStandingById(item).then((data) => list.push(data));
});
this.setState({
standingsList: list
},() => console.log("standingsList: ", this.state.standingsList));
}
async getStandingById(competitionId) {
//console.log("Fetching standing of competition with id: ", competitionId);
const url = this.state.url.concat("competitions/").concat(competitionId).concat("/standings/");
const options = {
method: 'GET',
headers: {
'X-Auth-Token': this.state.auth
}
};
let response = await fetch(url, options);
let data = await response.json();
return await data;
}
render() {
let standingsArr = this.state.standingsList;
console.log("standingsArr: ", JSON.stringify(standingsArr));
console.log("length: ", standingsArr.length);
return (
<div className="App">
<div>{this.state.standingsList.map((item) => (
<TableComp name="yes"/>
))}</div>
</div>
);
}
【问题讨论】:
标签: javascript reactjs api asynchronous fetch