Пытается установить setState, но функция возвращает ноль - PullRequest
0 голосов
/ 27 сентября 2018

Я использую React с веб-API Spotify и пытаюсь установить SetState.Я также использую метод жизненного цикла React, но он продолжает возвращать ноль.

componentDidMount() {
  this.fetchNewReleases()
}

fetchNewReleases() {
  const options = {
    "items": {
       "album_type": "single"
     }
  }

  const items = spotifyWebApi.getNewReleases(options, function (err, data) {
    if (err) {
     console.log(err)
    }
    else {
      data.albums.items.filter(item => {
        return item.album_type = "single"
      })
    }
  })

  this.setState({
    items:items
  }) 
}

Может кто-нибудь объяснить, почему, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

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

Это должно быть:

  spotifyWebApi.getNewReleases(options, (err, data) => {
    if (err) {
     console.log(err)
    }
    else {
      this.setState({
        items: data.albums.items.filter(item => {
         return item.album_type === "single"
        })
      });
    }
  });

Обратите внимание, что обратный вызов getNewReleases должен быть функцией стрелки в порядкечтобы получить правильный this.

0 голосов
/ 27 сентября 2018

Попробуйте:

componentDidMount() {
  this.fetchNewReleases()
}

 fetchNewReleases = () => {
          const options = {
            "items": {
              "album_type": "single"
            }
          }
          spotifyWebApi.getNewReleases(options, function (err, data) {
            if (err) {
              console.log(err)
            }
            else {
              let items = data.albums.items.filter(item => {
                return item.album_type = "single"
              })
              this.setState({
                items:items
              })
            }
          })

        }
...