开发者问题收集

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