首页 > 解决方案 > 将对象推送到数组反应本机

问题描述

我需要获取在 firestore 中具有 serviceClientID 字段的特定用户。

那些这样做的,我将其插入数组并将其放入我的状态聊天(setChat)中。

但问题是只有一个用户进入我的状态,我有两个用户使用这个字段。

为什么只有1个进入而不是2个?

下面的代码:

firebase.auth().onAuthStateChanged(async ({ uid }) => {
          const servicesCollection = await firestore()
            .collection('Providers')
            .doc(uid)
            .collection('ServiceHistory')
            .get();
          servicesCollection.docs.forEach(async item => {
            if (item.exists && item.data().serviceClientID) {
              const clientsCollection = await firestore()
                .collection('Clients')
                .doc(item.data().serviceClientID)
                .get();

              // if (item.data().serviceClientID === clientsCollection.id) {
              const values = {
                id: clientsCollection.id,
                name: clientsCollection.data().name.last,
                uid,
              };
              const arr = [];

              arr.push(values);
              // }
              console.log('arrayay', arr);

              setChats(arr);
            }
          });
        });

标签: arraysreactjsreact-nativeuse-statearray-push

解决方案


导致每个循环都清空一个数组。您必须将 {arr} 从函数中取出。然后你需要把数据推到里面。

const firebaseFunc =  () => {
      let arr = [];

      firebase.auth().onAuthStateChanged(async ({ uid }) => {
        const servicesCollection = await firestore()
            .collection('Providers')
            .doc(uid)
            .collection('ServiceHistory')
            .get();
        servicesCollection.docs.forEach(async item => {
          if (item.exists && item.data().serviceClientID) {
            const clientsCollection = await firestore()
                .collection('Clients')
                .doc(item.data().serviceClientID)
                .get();
            arr.push({
              id: clientsCollection.id,
              name: clientsCollection.data().name.last,
              uid,
            });
          });
      });

      setChats(arr);
      console.log('arrayay', arr);
    }


推荐阅读