我有一个问题要问,希望可以得到某人的帮助 .
我正在使用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 回答
ajax是异步的,你应该放置SetDefaultAddress()inslide done()的GetDefaultAddress()或setState回调 .