Функция данных не работает, реагируйте на собственный firestore

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

Коллекция напоминаний: Функция данных не работает, реагируйте на собственный firestore

Любая помощь высоко ценится!

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

suppa98 03.04.2021 16:18

нет я просто отредактировал вопрос и выложил скриншот коллекции

Nawfal Serrar 03.04.2021 16:25

Здесь, я думаю, вы должны получить каждый объект данных документа, который равен вашему пользователю. Если у этого пользователя 5 напоминаний, то должно быть 5 журналов консоли с большими объектами. Это?

suppa98 03.04.2021 16:35

ну, он входит в цикл и показывает на консоли каждое напоминание

Nawfal Serrar 03.04.2021 16:37

Ага. Тогда что вам нужно получить?

suppa98 03.04.2021 16:39

данные, а не весь объект, который содержит все объекты firebase и auth, как если бы data () не работал

Nawfal Serrar 03.04.2021 16:44
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
6
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести это на своей стороне, и я думаю, что это работает нормально. Я думаю, что полученный результат связан с полями 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.

Другие вопросы по теме