2 votes

Problème d'écoute des messages OnSnapshot avec une application de messagerie Firebase React Native

J'essaie de créer une application de messagerie React Native avec le SDK firebase. Dans l'écran de chat, j'essaie d'écouter les messages mis à jour dans ma base de données firestore. Je suis une grande partie du code montré dans ce dépôt github https://github.com/ReactNativeSchool/react-native-firebase-chat-app Mais il utilise react-native-firebase et j'utilise le SDK, ce qui fait que j'ai du mal à trouver le code équivalent avec le SDK de firebase. Qu'est-ce que je fais de mal dans le code ci-dessous qui me donne l'erreur suivante quand j'ouvre l'écran :

undefined n'est pas une fonction (près de '...(0,_firebaseConfig.listenToMessages)(threadID).onSnapshot...')

Je pense que c'est lié au fait que je n'ai pas converti correctement react-native-firebase en firebase SDK, mais je n'en suis pas sûr.

Voici mon code listenToThreads dans le fichier firebaseConfig où j'exécute toutes mes fonctions firebase. En dessous se trouve la partie que j'ai commentée et qui renvoie les valeurs de cette collection.

export const listenToMessages = async (threadID) => {
  return firebase.firestore()
    .collection('threads')
    .doc(threadID)
    .collection('messages');

  // try {
  //   const q = query(collection(db, "threads"), where("tid", "==", threadID));
  //   const doc = await getDocs(q);
  //   const data = doc.docs[0].data();
  //   return data.messages;
  // } catch {
  //   return []; 
  // }
};

et voici mon code onSnapshot que j'exécute à l'intérieur d'un hook UseFocusEffect qui fonctionne.

const unsubscribe = listenToMessages(threadID).onSnapshot(
    querySnapshot => {
      const formattedMessages = querySnapshot.docs.map(doc => {
        return {
            _id: doc.id,
            text: '',
            createdAt: new Date().getTime(),
            user: {}
        };
      });

      setMessages(formattedMessages);
    },
);

return () => {
    unsubscribe();
};

1voto

cark Points 109

En listenToMessages ne doit pas être async .

Il renvoie une promesse plutôt que le document souhaité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X