#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. Я думаю, вы упускаете мою мысль — плохая идея использовать частные недокументированные свойства, которые начинаются с подчеркивания. Для объектов, которые вы используете прямо сейчас, есть общедоступные свойства и методы, которые позволяют вам получить доступ ко всем этим данным, которые четко прописаны в документации. Поскольку я прокомментировал ваш вопрос, было бы полезно более четко просмотреть данные вашего документа, чтобы знать, что лучше всего делать.