第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Reactjs如何監(jiān)聽(tīng)firebase實(shí)時(shí)變化?

Reactjs如何監(jiān)聽(tīng)firebase實(shí)時(shí)變化?

慕虎7371278 2022-12-09 19:20:56
我正在使用 firebase 和 React js 創(chuàng)建一個(gè)實(shí)時(shí)聊天應(yīng)用程序。我創(chuàng)建了一個(gè) const functions = require('firebase-functions'); 在 firebase 中稱(chēng)為“聊天”。該集合包含唯一的room_ID(發(fā)送者和接收者的組合),并且該文檔再次包含稱(chēng)為“消息”的子集合。消息中的每個(gè)集合都有消息、時(shí)間、sender_id 和閱讀狀態(tài)等信息?,F(xiàn)在,每當(dāng)我在聊天列表中收到一條新消息時(shí),我都必須更新對(duì)話。我使用Reactjs的componentDidMount()方法并編寫(xiě)以下代碼:firestore.collection('chats').doc("b7EuhNpdzXUlxhSgDkn2a6oReTl1_OZbrlH8FjmVFqSAtAc0A6TUHS3I3").collection("messages").onSnapshot(querySnapshot => {  console.log("querySnapshot", querySnapshot)  querySnapshot.docChanges().forEach(change => {    console.log("change", change)    if (change.type === 'added') {      this.setState({messages : [...this.state.messages, change.doc.data()]});      console.log('New city: ', change.doc.data());    }    if (change.type === 'modified') {      console.log('Modified city: ', change.doc.data());    }    if (change.type === 'removed') {      console.log('Removed city: ', change.doc.data());    }  });});你可以在這里看到,它只適用于一個(gè)房間(b7EuhNpdzXUlxhSgDkn2a6oReTl1_OZbrlH8FjmVFqSAtAc0A6TUHS3I3)。我想以這樣一種方式編寫(xiě)查詢,它會(huì)收聽(tīng)每個(gè)聯(lián)系人的消息。為此,我必須刪除特定文檔的限制。請(qǐng)幫我。先感謝您。
查看完整描述

3 回答

?
翻過(guò)高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

我相信有一些更好的方法可以獲取您想要的數(shù)據(jù):


將您的 Firestore 重組為只有一個(gè)messages集合,如以下示例結(jié)構(gòu):


messages collection

    uid

    receiverUserId

    senderUserId

    msg

    read

    time

使用這種方法,您可以通過(guò)執(zhí)行以下操作來(lái)過(guò)濾正在查看的文檔,例如當(dāng)前經(jīng)過(guò)身份驗(yàn)證的用戶從多個(gè)用戶收到的文檔:


firestore.collection("messages")

  .where("receiverUserId", "==", authUid)

  .onSnapshot(function(querySnapshot) {

     //do whatever

});

創(chuàng)建多個(gè)偵聽(tīng)器,每個(gè)chats文檔一個(gè),以觀察其后續(xù)messages子集合。所以你可以做這樣的未經(jīng)測(cè)試的代碼:


firestore.collection('chats').get().then(function(querySnapshot) {

  querySnapshot.forEach(function(doc) {

      var eachChatRef = firestore.collection('chats').doc(doc.documentID)

      var messagesRef = eachChatRef.collection("messages");

      messagesRef.onSnapshot(function(snapshot) {

          snapshot.docChanges().forEach(function(messageDoc) {

              // Do whatever

          });

      });

  });

});


查看完整回答
反對(duì) 回復(fù) 2022-12-09
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

查看 CollectionGroups 的文檔 - 將您的偵聽(tīng)器設(shè)置為 .collectionGroup("messages") - 您將必須處理所有不同“聊天”文檔的更改。(提示:每個(gè)返回的消息 DocRef 都包含 refPath 字段 - 您可以簡(jiǎn)單地解析它以找到“父”聊天文檔的路徑)



查看完整回答
反對(duì) 回復(fù) 2022-12-09
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

為了擴(kuò)展到@LeadDreamer 的回答,這對(duì)我有用,可以使用以下方法收聽(tīng)集合中所有文檔的更改collectionGroup:


const unsub = () =>

  onSnapshot(collectionGroup(db, "reservations"), (doc) => {

    doc.docs.forEach((d) => {

      console.log(d.data());

    });

  });


查看完整回答
反對(duì) 回復(fù) 2022-12-09
  • 3 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)