Как поднять данные из snapshot.val () в состояние компонента? - PullRequest
0 голосов
/ 05 февраля 2019

Я делаю кнопку входа в систему с аутентификацией Firebase, которая ссылается на мою базу данных Firebase в реальном времени в обещании.Когда я пытаюсь поднять эти данные, чтобы изменить состояние компонента, они становятся равными нулю.

Я попробовал более простой подход, где я объявляю переменную вне ссылки на firebase, затем пытаюсь установить эту переменную в функции.

Я также попытался установить «this» в качестве пустой переменной массива, а затем получить к нему доступ в виде массива.

Я пытался установить "that" в this.state.ign, но когда я пытаюсь получить доступ к нужным мне данным, он становится нулевым

** edit - я также думал, что это асинхронныйпроблема, поэтому я использовал setTimeout 15000, чтобы пропустить 15 секунд перед попыткой console.log за пределами ссылки на firebase.

 var that = this;
 firebase.database().ref("users/" + this.state.userid).on("value", function (snapshot) {

      var userIGN = (snapshot.val().ign);

      console.log(userIGN); // WORKS - gives ign from database 

      that.setState({ ign: userIGN }); // WORKS - sets that.state.ign to ign from database 

      console.log(that.state.ign); // WORKS - gives ign from that.state 
    })

    console.log(that); // WORKS - shows object that has state with ign

    console.log(that.state); // FAIL - shows state object, but ign is null now?!

Второй console.log (that.state.ign) должен показатьточка данных из firebase ссылки

1 Ответ

0 голосов
/ 05 февраля 2019

Оказывается, даже с 15-секундным setTimeout, с моим очень плохим / прерывистым интернет-сервисом, тайм-аут не был достаточно длинным.Я попытался 30 секунд, и я могу получить доступ к данным!

var that = this;
    firebase.database().ref("users/" + this.state.userid).on("value", function (snapshot) {
      var userIGN = (snapshot.val().ign);
      console.log(userIGN); // WORKS - gives ign from database 
      that.setState({ ign: userIGN }); // WORKS - sets that.state.ign to ign from database 
      console.log(that.state.ign); // WORKS - gives ign from that.state 
    })
    setTimeout(() => {
      console.log(that); // WORKS - shows object that has state with ign
      console.log(that.state.ign); // WORKS NOW!!
    },30000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...