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();
};