2017-10-18 78 views
0

您好,我正在嘗試從我的Firebase獲取Google地圖標記的數據。我嘗試了equalTo方法,但它似乎工作錯了。我確實得到了我想要的數據,但我得到的數據與許多孩子有我要求的財產一樣多。例如,如果我要求的道具城市=倫敦,我得到一個與倫敦城市所有孩子的對象,但我得到這個對象經常有這個城市的孩子(像10或20次)這是不是很有效(如果我有一天成千上萬對這個城市的道具?)Firebase orderByChild()。equalTo()多次返回對象

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) 

     }) 
} 

回答

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', ...),你會爲孩子的事件。