Я застрял в этой головоломке, которую, похоже, не хочу решать, я уверен, что что-то забываю, так как я только начал изучать react-native.
У меня есть такой код:
async componentDidMount() {
let user = await UserRepository.getUserRef(firebase.auth().currentUser.uid);
await firebase
.firestore()
.collection("reminder")
.where("user", "= = ", user)
.get()
.then((remindersRecord) => {
remindersRecord.forEach((reminderDoc) => {
console.info(reminderDoc.data());
});
});Я пытаюсь получить данные «напоминаний» подключенного пользователя, запрос работает, так как мы получили ReminderDoc, который содержит кучу объектов, и внутри есть данные, которые я хочу, но когда я вызываю data (), ничего не меняется, я не t получить документ, он возвращает тот же объект.
Любая помощь высоко ценится!
нет я просто отредактировал вопрос и выложил скриншот коллекции
Здесь, я думаю, вы должны получить каждый объект данных документа, который равен вашему пользователю. Если у этого пользователя 5 напоминаний, то должно быть 5 журналов консоли с большими объектами. Это?
ну, он входит в цикл и показывает на консоли каждое напоминание
Ага. Тогда что вам нужно получить?
данные, а не весь объект, который содержит все объекты firebase и auth, как если бы data () не работал

Я попытался воспроизвести это на своей стороне, и я думаю, что это работает нормально. Я думаю, что полученный результат связан с полями boss и user, которые, как я полагаю, относятся к типу reference в firestore. Если вы войдете в консоль, такие поля дадут следующие результаты:
{
reference: DocumentReference {
_firestore: Firestore {
_settings: [Object],
_settingsFrozen: true,
_serializer: [Serializer],
_projectId: <PROJECT_ID>,
registeredListenersCount: 0,
bulkWritersCount: 0,
_backoffSettings: [Object],
_clientPool: [ClientPool]
},
_path: ResourcePath { segments: [Array] },
_converter: {
toFirestore: [Function: toFirestore],
fromFirestore: [Function: fromFirestore]
}
},
text_field: 'test',
...
}
Итак, для представленного примера вы получите 2 таких поля, и для этих полей вы не увидите строку. Кстати, поле временной метки также не будет отображаться должным образом.
Чтобы избежать этой проблемы, вы можете использовать пример pathимущество ссылки на документ или, когда дело доходит до отметки времени, вы можете использовать toDate()метод. Я создал небольшой пример, чтобы правильно показать поля (цикл по всем полям объекта):
remindersRecord.forEach((reminderDoc) => {
for (const [key, value] of Object.entries(reminderDoc.data())) {
if (key == 'boss' || key == 'user') console.info(`${key}: ${value.path}`)
else if (key == 'startAt') console.info(`${key}: ${value.toDate()}`)
else console.info(`${key}: ${value}`)
});
Я тестировал это напрямую в nodejs, но он должен работать и в componentDidMount.
Есть ли в уникальном напоминании данные о вызове атрибута?