更新状态时,在现有状态转换期间无法更新吗?

时间:2018-09-09 12:05:52

标签: javascript arrays reactjs react-redux

this.state = {
  filterData: [{
    attribute: '-1',
    filter: '-1',
    value: ''
  }],
}


_createFilterUI(dataSourceColumns) {
  if (this.state.dataSourceIndex == -1)
    return <div > Kindly first select Data Source. < /div>
  let dataSource = this.state.datasourcelist,
    dataType = '';
  let filterData = this.state.filterData
  let previousfilters = this.state.d3line.chartDataSo.filterDefintions;
  console.log(filterData.concat(previousfilters));


  this.setState({
    filterData: filterData.concat(previousfilters)
  })


  return this.state.filterData && this.state.filterData.map((el, i) => {

    if (el.attribute != -1) {
      dataType = dataSource[this.state.dataSourceIndex].columnDescription[el.attribute].JAVA_DATA_TYPE;
    }
    return (
      <div>
        { some content }
      </div>)
    )
  })
}

filterData是我的状态的一部分。 当我尝试使用filterData.concat(previousfilters)

更新filterData状态时

它没有更新,并且在保持Cannot update during an existing state transition后出现setState错误

请任何人指导我如何更新filterdata状态并解释我做错了什么。

控制台后,我无法正确更新状态。

1 个答案:

答案 0 :(得分:1)

我认为这里有两个问题。我无法完全确定,因为没有显示足够的代码,但是我想您是从_createFilterUI方法或render调用componentWillUpdate的。允许您从这些方法中调用其他方法,但在它们之间不允许调用setState

此外,setState does not automatically update the component也是如此,因此在上面的代码段中,您不能依靠在调用setState之后立即拥有新状态。您将必须在可以提供setState的回调中或生命周期的另一点完成其余功能。