簡體   English   中英

ReactJS setState

[英]ReactJS setState

我有一個問題要問,希望能得到別人的幫助。

我正在使用ReactJS開發網站。 我遇到一個與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")); 
}

ajax是異步的,應將SetDefaultAddress()插入GetDefaultAddress()的done()或setState回調中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM