【问题标题】:React setState is not updating Always with componentDidMountReact setState 不更新总是使用 componentDidMount
【发布时间】:2020-10-15 20:19:40
【问题描述】:

我想设置一堆状态,但有时 setState 有效,有时无效,并且尝试使用 componetWillMount 也没有成功。 带有 setState 的回调函数正在触发带有 null 的警报

这是我的代码

componentDidMount(){
var self = this
var uiData = {ui_id:"custReg"}
api('ip/defaultValue/load_DefaultValue', uiData)
.then(function async (response) {
  if(response){
    if(response.data.status){
      var defaultData = response.data.data
      self.setState({ 
        defaultDatas: response.data.data ,
        branches: defaultData.filter(data =>{return data.TypeID === "Branch"}),
        customerCategories: defaultData.filter(data =>{return data.TypeID === "Customer 
        Category"}),
        customerTypes: defaultData.filter(data =>{return data.TypeID === "Customer Type"}),
        titles: defaultData.filter(data =>{return data.TypeID === "Name Title"}),
        relationTypes: defaultData.filter(data =>{return data.TypeID === "Relation Type"}),
        maritalStatuses: defaultData.filter(data =>{return data.TypeID === "Marital 
        Status"}),
        educations: defaultData.filter(data =>{return data.TypeID === "Education"}),
        occupations: defaultData.filter(data =>{return data.TypeID === "Occupation"}),
        religions: defaultData.filter(data =>{return data.TypeID === "Religion"}),
        castes: defaultData.filter(data =>{return data.TypeID === "Caste"}),
        bloodGroups: defaultData.filter(data =>{return data.TypeID === "Blood Group"}),
        incomeRanges: defaultData.filter(data =>{return data.TypeID === "Income Range"}),
        grades: defaultData.filter(data =>{return data.TypeID === "Grading"}),
        allDataSet:true
      }, () => {
        if(self.state.branches){
          self.forceUpdate()
          alert(JSON.stringify(self.state.branches))
        }
      }); 
    }else{
      alert("Unable to load default data.")
    }
  }else{
    alert("Unable to connect.")
  }
})

}`

【问题讨论】:

    标签: reactjs setstate


    【解决方案1】:

    看, React doesn't guarantee that the state updates are done immediately。这就是原因,不要在设置状态后立即调用console.log(this.state)

    【讨论】:

    • 感谢您的回答。但是我在回调函数内部发出警报,所以它应该更新,对吧?
    • 不!即使在回调中也不能保证
    猜你喜欢
    • 1970-01-01
    • 2021-08-02
    • 2016-03-01
    • 2017-04-19
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多