等待请求完成后再执行操作ReactJS

时间:2018-12-12 17:24:04

标签: reactjs

我的React应用程序中有一个axios呼叫

  }).then(res =>
       this.setState({
           name: res.data.fname,
           sName: res.data.sname,
           percentage: res.data.percentage,
           result: res.data.result,
           showResult: true,
           type: this.typeHandler(res.data.percentage)
       }));
       }

完成请求并设置状态后,我想将输入表单设置为空白。所以我尝试了

  }).then(res =>
       this.setState({
           name: res.data.fname,
           sName: res.data.sname,
           percentage: res.data.percentage,
           result: res.data.result,
           showResult: true,
           type: this.typeHandler(res.data.percentage)
       })
       ).then(
       this.setState(prevState =>{
          return {inputName: '', inputSname: ''} 
       }))
       }

使用另一个诺言,在第一个诺言之后得到解决,但是在设置请求状态之前,表格仍设置为空白。我也尝试过使用回调,但是第一个.then()方法不接受第二个参数。我该怎么解决?

1 个答案:

答案 0 :(得分:1)

setState可以回叫

  

https://reactjs.org/docs/react-component.html#setstate

public void toggleCheckbox(ValueChangeEvent valueChangeEvent) {
    // Add event code here...
    Boolean checked = (Boolean) valueChangeEvent.getNewValue();
    //get list
    ADFContext adfCtx = ADFContext.getCurrent();
    Map params = adfCtx.getPageFlowScope();
    List<Row> list = (List<Row>) params.get("docQueue");
    if (list == null) {
        list = new ArrayList<CopyQueuePojo>();
    }

    DCBindingContainer bindings = (DCBindingContainer) BindingContext.getCurrent().getCurrentBindingsEntry();
    DCIteratorBinding documents = bindings.findIteratorBinding("documentsIterator");
    int index = documents.getCurrentRowIndexInRange();

    Row[] rows = documents.getAllRowsInRange();
    Row line = rows[index];

    if (checked) {
        //add to queue
        if (index >=  0) {                
            //check to make sure there are no duplicates
            boolean exists = false;
            for(int i=0; i<list.size(); i++) {
                if(list.get(i).getId() == ((String) line.getAttribute("id"))) {
                    exists = true; 
                    break;
                }
            }
            if (!exists) {                    
                list.add(line);
            }
        }
    } else {
        //remove from queue
        for(int i=0; i<list.size(); i++) {
            if(list.get(i).getId() == ((String) line.getAttribute("id"))) {
                list.remove(i);
            }
        }
    }
    params.put("docQueue", list);
}

而不是另一个,然后将此回调传递给setState