首页 > 解决方案 > React setState 不更新总是使用 componentDidMount

问题描述

我想设置一堆状态,但有时 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.")
  }
})

}`

标签: reactjssetstate

解决方案


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


推荐阅读