firebase - 数据功能不起作用反应本机 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 获取它返回相同对象的文档。
任何帮助深表感谢!
解决方案
我试图在我这边复制这个,我认为这很好。我认为你得到的结果与字段有关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.log(`${key}: ${value.path}`)
else if (key == 'startAt') console.log(`${key}: ${value.toDate()}`)
else console.log(`${key}: ${value}`)
});
我直接在 nodejs 中测试了这个,但它也应该可以工作componentDidMount
。
推荐阅读
- email - Woocommerce 跟进电子邮件插件 - 电子邮件问题
- r - Rvest - 无法读取网站内容 - 不知道选择哪些节点
- java - 数组的平均值
- java - 我的 java 选择排序算法有什么问题?
- javascript - 如何在 MySQL 上存储 cron 时间表达式
- postgresql - Postgres 是否在 BIGINT 列上使用索引?
- javascript - 单选按钮在选择时显示 div,但在选择不同的单选按钮后不隐藏
- git - 如何合并具有一些相似提交且没有共同祖先的两个分支?
- jquery - 使用 Ajax Codeigniter 进行 Select2 分页
- python - 从外部访问 django runserver