【发布时间】:2019-05-20 12:33:40
【问题描述】:
我已经花了几天的时间试图解决这个问题,希望大家能帮助我。我想从 Cloud Firestore 数据库中获取帖子并将其显示在 React 应用上。
我在 Firestore 中的数据结构如下:
[项目]/NewsPosts/[文档]
每个文档在 Firestore 中的结构如下:
[随机生成的id]
- 标题:[字符串]
- 正文:[字符串]
我通过执行以下操作获得了帖子:
let posts= [];
//db = firebase.firestore();
db.collections.("NewsPosts").get().then((snapshot) => (
snapshot.forEach((doc) => (
posts.push({
id: doc.id,
title: doc.data().title,
body: doc.data().body
})
))
));
这成功地创建了一个包含我想要的信息的对象数组,因此获取数据不是问题。然而,当我去映射这个数组来创建帖子时,什么都没有被创建。我已经尝试了映射数组的所有变体来创建组件,但它不起作用。
但是,当我对一组对象进行硬编码并映射该对象时,它就可以工作了。例如,这适用于硬编码的对象数组:
//hard is the hardcoded array
let displayPosts = hard.map((p) => (
<div key={p.id}>
<h1>{p.title}</h1>
<p>{p.body}</p>
</div>
))
return(
<Page>
{displayPosts}
</Page>
);
当我在浏览器控制台中比较硬编码数组和其他数组时,数组看起来不同。
我想是数组中的这种差异导致了问题。
如果有 2 个元素,这就是它们在浏览器控制台中的外观:
(2)[{...},{...}] (hardcoded)
[] (array filled from firestore)
但是,关于数组的其他所有内容在浏览器控制台中都是相同的。
为什么这些数组看起来不同?这是让我无法正确映射每个索引处的对象的原因吗?如何让映射作用于从 Firestore 获取的对象数组?
提前感谢您的帮助!这让我很头疼。
【问题讨论】:
-
你能告诉鳕鱼在哪里尝试映射数组吗?
-
当然!我编辑了我的原始帖子以添加它
标签: javascript arrays reactjs firebase google-cloud-firestore