0

Hallo, ich versuche, Daten für Google-Map-Marker von meiner Firebase zu bekommen. Ich habe es mit der equalTo Methode versucht, aber es scheint falsch zu funktionieren. Ich bekomme die Daten, die ich will, aber ich bekomme es genau so oft, wie viele Kinder die Eigenschaft haben, nach der ich frage. Wenn ich zum Beispiel nach der Stadt London frage, bekomme ich ein Objekt mit allen Kindern mit der Stadt London, aber ich bekomme dieses Objekt so oft, wie es Kinder mit dieser Stadt gibt (wie 10 oder 20 Mal) nicht sehr wirksam (was ist, wenn ich mit dieser Stadt einen Tag tausende von Requisiten?)Firebase orderByChild(). EqualTo() gibt das Objekt oft zurück

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) 

     }) 
} 

Antwort

1

von Entwurf wird das child_added Ereignis für jedes Kind genannt werden, die Ihre Suchanfrage übereinstimmt, für listening for child events in die Dokumentation. Wenn Sie möchten, dass ein einzelnes Ereignis die gesamte Datenliste zurückgibt, sollten Sie stattdessen den Ereignis-Listener value verwenden. Vom listen for value events documentation:

Anbringen eines value Beobachter auf eine Liste von Daten wird die gesamte Liste von Daten als eine einzelne Momentaufnahme zurückkehren, die Sie dann Schleife über zu Zugang einzelne Kinder.

ref.once('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
     var childKey = childSnapshot.key; 
     var childData = childSnapshot.val(); 
     // ... 
     }); 
}); 

Sie können auch on('value', ...) wie verwenden Sie es für ein Kind Ereignis.

Verwandte Themen