React native firebase как присвоить значение при получении данных из БД

#reactjs #firebase #react-native #firebase-realtime-database

#reactjs #firebase #react-native #firebase-база данных в реальном времени

Вопрос:

Привет, я пытаюсь присвоить значение var foo значению в моей базе данных firebase, однако это просто дает мне неопределенный результат при использовании консольного входа в foo.

 var foo;
  firebase.database().ref(`/topics/lec1`).once('value').then(function(snapshot) {
     foo = snapshot.val();

    console.log(foo); 

  });

   console.log(foo); //undefined
  

Комментарии:

1. это не определено, потому что вы нигде его не присваиваете..

2. я заблокировал его, он все еще не определен

3. Только один вопрос, это первая консоль. журнал также возвращает неопределенный? Один внутри then ? если нет, то все в порядке. Вы регистрируете foo до того, как оно будет установлено firebase , поскольку оно asynchronous

4. во-первых, вам нужно присвоить его, во-вторых, оно не будет определено снаружи then() , поскольку firebase является асинхронным.

5. нет, дает мне правильный результат

Ответ №1:

Нигде вы не присваиваете переменную foo. Попробуйте ниже:

   var foo;
      firebase.database().ref(`/topics/lec1`).once('value').then(function(snapshot) {
         foo = snapshot.val();
     this.state.lec  = foo;
        console.log(foo); 

      });

       console.log(foo); //undefined
  

Комментарии:

1. все еще не определено

2. Вместо функции() используйте анонимную функцию со стрелкой: () => {

Ответ №2:

Делайте все, что вы хотите сделать внутри обратного вызова

 var foo;
firebase
  .database()
  .ref(`/topics/lec1`)
  .once("value")
  .then(function(snapshot) {
    foo = snapshot.val();
    displayValue();
  });

function displayValue() {
  //use value from firebase via foo.
}
  

Комментарии:

1. Большое вам спасибо!

2. В React вы обычно вызываете setState(...) изнутри displayValue , что затем запускает обновление пользовательского интерфейса.