首页 文章

ReactJS setState

提问于
浏览
0

我有一个问题要问,希望可以得到某人的帮助 .

我正在使用ReactJS开发一个Web . 我面临一个与 setState 有关的问题 . 我将展示我的代码,而不是解释这么多的单词 .

首先,在 componentDidMount 函数中,我调用 this.GetDefaultAddress() 函数首先从API获取默认地址 . 在 this.GetDefaultAddress() 函数中,当API完成调用时,返回的数据我指示setState供以后使用,而不是继续调用API . 之后,我调用 setDefaultAddress 函数,将所有信息设置为表单 . 但是,当进入 setDefaultAddress 函数时,会出现一些错误提示,表示状态为null . 我注意到,当执行 setState 时,状态不会直接改变 . 所以我的 setDefaultAddress 应该放入哪个函数,以便函数可以获得最新的状态 .

componentDidMount() {
  $(document).ready(function () {
   this.GetDefaultAddress();

   this.SetDefaultAddress();
  }
}

这是从API函数获取数据的GetDefaultAddress .

GetDefaultAddress(){
    $.ajax({
        type: "GET",
        url: "/api/User/GetDefaultAddress",
        contentType: "application/json;charset=utf-8",
        error: function (err) {
            //console.log(err);
            // $("#overlay").hide();
            swal("Error", "Get Default Address Error. Please try again", "error");
        }
    }).done(function (data) {
        //console.log(data);
        if(data.data != null){
            console.log(this.state.quickQuote);
            this.setState(function(prevState, props) {
                return {
                    parcelNumber:prevState.parcelNumber,
                    pickup: prevState.pickup,
                    deliveryType: prevState.deliveryType,
                    quotePrice: prevState.quotePrice,
                    shipment: prevState.shipment,
                    quickQuote: prevState.quickQuote,
                    defaultAddress: data.data
                };
            });
        }else{
            //no default address found.
        }
    }.bind(this))
}

这是SetDefaultAddress函数 .

SetDefaultAddress(){
    $("#sender1-name").val(this.state.defaultAddress.Name);
    $("#sender1-contactNo").val(this.state.defaultAddress.ContactNo);
    $("#sender1-email").val(this.state.defaultAddress.Email);
    $("#sender1-address1").val(this.state.defaultAddress.Address1);
    $("#sender1-address2").val(this.state.defaultAddress.Address2);
    $("#sender1-postcode").val(this.state.defaultAddress.Postcode);

    var opt = document.createElement("option");
    opt.value = this.state.defaultAddress.LocationID;
    opt.innerHTML = this.state.defaultAddress.Location;
    $("#sender1-location").append(opt);
    $("#sender1-location").val(this.state.defaultAddress.LocationID).trigger("change");
    $("#sender1-postcode").PostcodeFuzzySearch($("#sender1-city"), $("#sender1-location"), $("#sender1-state")); 
}

1 回答

  • 0

    ajax是异步的,你应该放置SetDefaultAddress()inslide done()的GetDefaultAddress()或setState回调 .

相关问题