首页 > 解决方案 > 数据功能不起作用反应本机 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.log(reminderDoc.data());
        });
      });

我正在尝试获取已连接用户的“提醒”数据,查询有效,因为我们得到了包含一堆对象的提醒文档,并且里面有我想要的数据但是当我调用 data() 时没有任何变化,我没有t 获取它返回相同对象的文档。

提醒集合: 在此处输入图像描述

任何帮助深表感谢!

标签: firebasereact-nativegoogle-cloud-firestorepuzzle

解决方案


我试图在我这边复制这个,我认为这很好。我认为你得到的结果与字段有关bossuser我猜是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.log(`${key}: ${value.path}`)
       else if (key == 'startAt') console.log(`${key}: ${value.toDate()}`)
       else console.log(`${key}: ${value}`)
});

我直接在 nodejs 中测试了这个,但它也应该可以工作componentDidMount


推荐阅读