показ сообщений с доски объявлений с использованием firebase в реагировать - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в FireBase, и я следую учебнику от YouTube о том, как отображать сообщения в режиме реального времени с помощью FireBase.Я не получаю никакой ошибки и не могу получить сообщения из облачного пожарного хранилища.Может ли кто-нибудь любезно указать мне правильное направление, поскольку я перепробовал все, что могу, но, похоже, ничего не работает.Ниже приведен снимок экрана с моей базой данных пожарного магазина и моим кодом, который был сокращен во избежание любой сложности.

enter image description here

          constructor(props) {
            super(props);
            this.state = {
              message: '',
              messages: [],
            };
          }

          componentDidMount() {
            firebase
              .database()
              .ref()
              .child('/message-board/gFmLa20cKCzXilXSDGGq')
              .once('value', snapshot => {
                const data = snapshot.val();
                if (data) {
                  const initMessages = [];
                  Object
                    .keys(data)
                    .forEach(message => initMessages.push(data[message]));
                  this.setState({
                    messages: initMessages
                  });
                }
              });

            firebase
              .database()
              .ref()
              .child('/message-board/gFmLa20cKCzXilXSDGGq')
              .on('child_added', snapshot => {
                const data = snapshot.val();
                if (data) {
                  this.setState(prevState => ({
                    messages: [data, ...prevState.messages]
                  }));
                }
              });
          }


          renderItem({ item }) {
            return (
              <View style={styles.listItemContainer}>
              <Text style={styles.listItem}>{item}</Text>
              </View>
            );
          }

          render() {
            const { message, messages } = this.state;
            let emptyComponent = null;

            emptyComponent = (
              <View style={styles.emptyComponent}>
                <Text>No Messages Found</Text>
              </View>
            );

            return (
                  <View style={styles.wrapper}>
                    <FlatList
                      data={messages}
                      renderItem={this.renderItem}
                      ListEmptyComponent={emptyComponent}
                    />
                </View>
              </SafeAreaView>
            );
          }
        }

1 Ответ

0 голосов
/ 26 сентября 2019

Похоже, вы используете код Firebase для извлечения данных, хранящихся в Firestore.Хотя обе базы данных предлагаются firebase, они различаются по своей структуре и способу доступа к информации.

Чтобы получить сообщения, один раз может выглядеть так:

db.collection("message-board").doc("gFmLa20cKCzXilXSDGGq")
    .get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, " => ", doc.data());
        });
    })
    .catch(function(error) {
        console.log("Error getting documents: ", error);
    });

Взятые из этих документов здесь: https://firebase.google.com/docs/firestore/query-data/get-data#get_multiple_documents_from_a_collection

Поскольку вы ищете обновления в реальном времени, это может выглядеть примерно так:

db.collection("message-board").doc("gFmLa20cKCzXilXSDGGq")
    .onSnapshot(function(doc) {
        console.log("Current data: ", doc.data());
    });

Взят из: https://firebase.google.com/docs/firestore/query-data/listen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...