您好我试图从我的Firebase获取谷歌地图标记的数据。我用equalTo
方法尝试了它但似乎工作错了。我确实得到了我想要的数据,但我得到的确与许多孩子都拥有我要求的财产一样频繁。因此,例如,如果我要求道具城市=伦敦,我得到一个与伦敦城市的所有孩子的对象,但我得到这个objekt经常有这个城市的孩子(如10或20倍)这不是很有效(如果我有一天有这个城市有成千上万的道具怎么办?)
componentWillUpdate (){
const previousMarker = this.state.markers;
this.Ref.orderByChild('address').equalTo(this.props.city)
.on('child_added', snap => {
previousMarker.push({
lat: snap.node_.children_.root_.right.left.value.children_.root_.left.value.value_,
lng: snap.node_.children_.root_.right.left.value.children_.root_.value.value_,
price: snap.node_.children_.root_.value.value_,
key: snap.key + "_Marker",
})
console.log(previousMarker)
})
}
答案 0 :(得分:1)
按照设计,将为每个与您的查询匹配的子项调用child_added
事件,请参阅listening for child events的文档。
如果您希望单个事件返回整个数据列表,则应使用value
事件侦听器。来自listen for value events documentation:
将
value
观察者附加到数据列表将返回整个 数据列表作为单个快照,然后您可以循环到 接触个别孩子。ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });
您也可以像对待儿童活动一样使用on('value', ...)
。