我有一个问题要问,希望能从别人那里得到帮助。
我正在使用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"));
}https://stackoverflow.com/questions/47788688
复制相似问题