Как получить точные данные из react native firestore onSnapshot вместо данных с массивами?

#javascript #firebase #react-native #google-cloud-firestore

#javascript #firebase #react-native #google-облако-firestore

Вопрос:

Я вызываю onSnapshot в useEffect и получаю данные при обновлении конкретного документа. Я могу получить данные, но данные возвращаются в виде массивов с индексом. Например,

 {"createdAt": [7, 1595865535572], 
"lastMessage": [16, {"assetURL": [Array], "conversationId": [Array], "createdAt": [Array], "text": [Array]}], 
"observerUIDs": [10, [[Array], [Array]]], 
"observers": [10, [[Array], [Array]]]
  

Что в вызове api я должен получить

 {createdAt: 1595865535572, 
lastMessage: {"assetURL": "URL", "conversationId": "ID", "createdAt": 1242141204, "text": "HI}, observerUIDS: [{...}, {...}], ...}
  

В вызове useEffect я вызываю как

 const subscriber = firestore()
      .collection('Conversations')
      .where('observerUIDs', 'array-contains', 'uid')
      .onSnapshot(async documentSnapshot => {
documentSnapshot.docChanges().forEach((change) => {
          var event = change._nativeData.doc.data;
          console.log(event);
})
  

Есть ли способ получить точные данные, кроме массива с индексом?

Спасибо

Комментарии:

1. Пожалуйста, отредактируйте вопрос, чтобы более подробно показать документ, который вы пытаетесь прочитать. Этот журнал отладки не очень полезен. Скриншот документа может помочь.

Ответ №1:

Решил это, используя documentSnapshot.docs[0]._data вместо

Комментарии:

1. Похоже, вы пытаетесь использовать личные данные, которые не отображаются через API с помощью обоих _nativeData и _data . Это плохая идея, поскольку эти детали реализации могут меняться со временем и нарушать ваш код. Вы должны использовать общедоступные API.

2. Данные, которые я получаю из вышеуказанного метода, — это точно такие же данные, которые я получаю из api. Я пытаюсь уменьшить количество возможных вызовов api, поскольку он удваивает чтение, если я вызываю api внутри onSnapshot

3. Я думаю, вы упускаете мою мысль — плохая идея использовать частные недокументированные свойства, которые начинаются с подчеркивания. Для объектов, которые вы используете прямо сейчас, есть общедоступные свойства и методы, которые позволяют вам получить доступ ко всем этим данным, которые четко прописаны в документации. Поскольку я прокомментировал ваш вопрос, было бы полезно более четко просмотреть данные вашего документа, чтобы знать, что лучше всего делать.