array.list всегда возвращает 0 в componentDidMount - PullRequest
0 голосов
/ 24 сентября 2018

Это проблема, с которой я сталкиваюсь, она отлично работает вне 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 голосов
/ 24 сентября 2018

setState является асинхронным.Это означает, что для доступа к последней версии необходимо сделать это внутри обратного вызова:

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

И если я правильно интерпретировал ваш код, вы звоните setState внутри render(), что определенно НЕприемлемый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...