[英]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.