【发布时间】:2018-08-06 03:55:53
【问题描述】:
请有人帮忙。我梳理了所有文档,检查了所有类似的问题,真的看不出我遗漏了什么。
我是新来的反应并试图映射从 firebase 数据库的异步调用返回的文档。
代码如下:
class Posts extends React.Component {
constructor(props) {
super(props);
this.state = {
data: [],
};
}
componentDidMount() {
let posts = [];
db.collection("Posts").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
posts.push({
data: doc.data(),
id: doc.id
});
});
});
this.setState({
data: posts
});
}
renderPosts() {
console.log(this.state.data);
return this.state.data.map((post, index) => {
console.log(post);
console.log(index);
return (
<div>
{index}
</div>
)
})
}
render() {
return(
<div>
{this.renderPosts()}
</div>
);
}
}
我确信这是非常简单的事情,但我正在拔头发。如果我检查我的状态,我可以看到数据。控制台.log(this.state.data);在 renderPosts 内部甚至可以准确显示我需要映射的内容,但是映射回调中的所有内容都没有返回,我最终得到一个空的任何帮助将不胜感激。
【问题讨论】:
-
我认为从 Firebase 获取数据是异步的,对吗?这意味着请求承诺的
then中的posts.push在之后 setState 运行。 -
相反,在 then 回调中设置凝视,而不是 forEaching 和 push,使用
map。通过将回调转换为箭头函数,确保使用正确的this -
是的,它是异步的。
标签: javascript reactjs firebase google-cloud-firestore jsx