首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJS setState

ReactJS setState
EN

Stack Overflow用户
提问于 2017-12-13 16:38:38
回答 0查看 84关注 0票数 0

我有一个问题要问,希望能从别人那里得到帮助。

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

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

代码语言:javascript
复制
componentDidMount() {
  $(document).ready(function () {
   this.GetDefaultAddress();

   this.SetDefaultAddress();
  }
}

这是从API函数中获取数据的GetDefaultAddress。

代码语言:javascript
复制
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函数。

代码语言:javascript
复制
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")); 
}
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47788688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档