【发布时间】:2020-02-11 16:08:37
【问题描述】:
好的,所以每个人都知道单独的映射将完成在 React 渲染方法中渲染组件的技巧,如下所示:
var listOfService = ['A', 'B', 'C', 'D', 'E'];
const listItems = listOfService.map((singleItem) =>
<a className="style_class">{singleItem}</a>
);
如果您在渲染方法的返回中调用 listItems,您将获得列表,这就是单个列表,但我有一个 firebase firestore 数据库,我想遍历该数据库并将每个文档打印为我调用了一个 React 组件 Service,我知道你不能在循环或 if 语句中使用 JSX,所以我尝试了这个:
renderServices() {
let db = firebase.firestore();
var details = [[]];
db.collection('providers').get().then(function (snapshot) {
snapshot.forEach(function (doc) {
details.push(
[
doc.data().owner_name,
doc.data().experience,
doc.data().charges,
doc.data().address,
doc.data().home_service,
doc.data().highlights,
doc.data().certifications,
doc.data().specialty,
doc.data().facility
]
);
//tried loading here Serivce, didn't work
});
})
.catch(function (error) {
console.log(error);
});
details.map((singleDetail) =>
(< Service details={singleDetail} />)
);
}
所以我尝试了这个但它不起作用,我写了一些控制台日志并且数据正确输入。首先,我得到“providers”文档的整个数组,提供者列表作为“snapshot”传递,所以我用另一个函数循环快照,该函数正在获取一个名为doc的文档,然后推送它在var 中称为details,这是一个数组但是!它不起作用,即使数据在那里也没有填充数组,因此我无法映射,关于如何解决这个问题的任何想法?
【问题讨论】:
-
“我知道你不能在循环或 if 语句中使用 JSX”是什么意思?您已经从循环内部返回 JSX,所以您确定这就是您的意思吗?
-
我对 Firestore 没有太多经验,但通常像这样的操作是异步的(基于您对
then的使用,我会说是这种情况)。当您偶然尝试执行map时,details仍然是一个空数组吗? -
@BrianThompson 是的,详细信息数组保持为空,这很奇怪。我在 details.push() 之前写了 console.log 行,它显示了每个数据,但它似乎无法将相同的数据传递给细节数组。它就像某种阻塞和超出范围的问题
-
创建 jsx 元素数组,即:代码中的服务组件。将 doc 作为详细信息传递给服务并从函数返回详细信息数组。
标签: javascript reactjs firebase google-cloud-firestore