Невозможно прочитать данные из базы данных Firebase в реальном времени в React Native

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

#javascript #reactjs #огневая база #реагировать-родной #firebase-база данных в реальном времени

Вопрос:

Я работаю над простым приложением React Native для чтения и записи данных из базы данных Firebase. Моим разрешениям на чтение и запись в Firebase присвоено значение true:

 {
  "rules": {
    ".read": true,  
    ".write": true,  
  }
}
 

Вот мои соответствующие файлы:

App.js

 import React from 'react'
import {View, StyleSheet, Button} from 'react-native'
import * as firebase from 'firebase'
import RootStackNavigator from './navigation/RootNavigation'

export default class App extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
      isLoadingComplete: false
    }
    var firebaseConfig = {
      apiKey: "xxxxxxx",
      authDomain: "testproject-9d0bc.firebaseapp.com",
      databaseURL: "https://testproject-9d0bc-default-rtdb.firebaseio.com",
      projectId: "testproject-9d0bc",
      storageBucket: "testproject-9d0bc.appspot.com",
      messagingSenderId: "1003049293166",
      appId: "1:1003049293166:web:1df37fd6d181cf895cdd7f"
    };

    if (!firebase.apps.length) {
    firebase.initializeApp(firebaseConfig)
    } else {
      firebase.app()
    }
   }

  render() {
    return (
    <View style={styles.container}>
      <RootStackNavigator/>
    </View>
    )
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
  },
});
 

RootStackNavigation.js

 import React from 'react';
import { createAppContainer, StackNavigator } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import HomeScreen from '../src/screens/HomeScreen';

const RootStackNavigator =  createStackNavigator(
  {
      screen: HomeScreen
  },
  {
    initialRouteName:"screen", // first component that should be displayed
    defaultNavigationOptions: {
      title: "App" 
    }
  }
);

export default createAppContainer(RootStackNavigator)
 

HomeScreen.js

 import React from "react";
import { Text, StyleSheet, View, Button, TouchableOpacity } from "react-native";
import * as firebase from "firebase";
const HomeScreen = (
  props
) => {
  function getData() {
    firebase
      .database()
      .ref("people/")
      .on("value", (snapshot) => {
        const age = snapshot.val().age;
        console.log("Age: "   age);
      });
  }

  return (
    <View>
      <Text>Hello this is the home screen</Text>
      <Button title="Get Data" onPress={getData} />
    </View>
  );
};

const styles = StyleSheet.create({
  text: {
    fontSize: 30,
  },
});

export default HomeScreen;
 

Моя база данных firebase выглядит следующим образом (все данные были добавлены вручную через веб-сайт firebase), и я хочу иметь возможность распечатать эти элементы после нажатия кнопки «Получить данные» на консоли, как показано в моей getData функции в HomeScreen.js

База данных Firebase

Однако мой код getData не работает, и ничего не выводится на мою консоль. Что я здесь упускаю из виду?

Ответ №1:

Пожалуйста, измените это в своем коде

 firebase.database.ref("people").on("value", snapshots => {
    let peoples = [];
    snapshots.forEach((snapshot) => {
   peoples.push(snapshot.val().age);
    console.log(snapshot.val().age);
    });
   // here you can set this Array
  // setPeople(peoples) 
 

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

1. Привет, Мукуррам! Я опубликовал правильный ответ выше. Спасибо за помощь!

Ответ №2:

Разобрался в моей проблеме. Как вы можете видеть в моей базе данных firebase, способ доступа к моим данным был неправильным. Если бы я хотел узнать возраст «папы», я должен был позвонить snapshot.val().dad .