#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
, что затем запускает обновление пользовательского интерфейса.