setState 然后在 React JS 中递归调用函数
2018-10-24
1529
单击按钮时,我会逐一检查所有服务器的可用性。完成第一个服务器检查后,它将使用 ++index 递归调用相同的函数。代码如下:
tempA = (index) => {
console.log("index is--> " + index);
let oRecord = this.state.aServers[index];
let componentStatus = {};
componentStatus[oRecord.id] = <div className='icon--loading'>
</div>
this.setState({
componentStatus: componentStatus
});
var request = "component?
operation=check_server_pingability&target_server=" + oRecord.name +
"&_=" + getDateTime();
fetch(request, {
credentials: "same-origin"
})
.then(response => response.json())
.then(response => {
componentStatus[oRecord.id] = <div title=
{response.message} className={"icon icon--" + response.status + "
cell"}></div>
this.setState({
componentStatus: componentStatus
}, () => {
console.log(this.state.componentStatus[oRecord.id])
this.tempA(++index);
});
})
}
首先,它将图标设置为加载图标。然后在网络调用后,它应该将图标更新为失败或成功。完成第一个服务器检查后,它应该对列表中的下一个服务器执行相同的步骤。现在的问题是,完成第一个服务器检查后,它将图标更新为失败,但当它开始检查第二个服务器时,第一个服务器的状态消失并显示为空白。列表中的所有服务器都发生了这种情况。每当它去检查下一个服务器时,较早的服务器的状态都会消失。请检查代码并让我知道问题出在哪里。谢谢帮助。
1个回答
我认为问题出在行
let componentStatus = {};
中,每次您放入只有一个字段 (
[oRecord.id]
) 的状态对象
componentStatus
时。您应该尝试更改此行:
let componentStatus = this.state.componentStatus;
ivankoleda
2018-10-24