array.list在componentDidMount中总是返回0

时间:2018-09-24 08:21:36

标签: reactjs react-native ecmascript-6

这是我面临的问题,它在componentDidMount外部运行良好,并且在渲染视图后在函数中调用时返回确切的数字:

componentDidMount = () => {    
  var obj = snapshot.val()
  var favoritesList = []
  var keys = []

  for(let a in obj){
    favoritesList.push(obj[a])
    keys.push(a)
  }

  this.setState({
    favoritesList:favoritesList,
    keys:keys,
  })

  console.log(this.state.keys.length)
  console.log(this.state.favoritesList.length)
}

我的目标是在列表为空时显示文本组件

  if (this.state.favoritesList.length === 0)
      this.setState({empty: true})

      ...

      {this.state.empty ?  
        <Text>
         Oh such empty!
        </Text>
         : null }

调用此函数时,我有点困惑:

test(item) {
    console.log(item.index)
    console.log(this.state.keys.length)
}

1 个答案:

答案 0 :(得分:4)

setState是异步的。这意味着,要访问最新消息,需要在回调内部进行操作:

 this.setState({
   favoritesList,
   keys,
 }, () => {
   console.log(this.state.keys.length)
   console.log(this.state.favoritesList.length)
 });

如果我正确解释了您的代码,则您是在setState内部调用render(),这绝对是不可接受的。