0

Bonjour, j'essaie d'obtenir des données pour les marqueurs google-map depuis ma Firebase. Je l'ai essayé avec la méthode equalTo mais cela semble fonctionner mal. Je reçois les données que je veux, mais je l'obtiens exactement aussi souvent que beaucoup d'enfants ont la propriété que je demande. Donc par exemple si je demande la ville de prop = Londres, je reçois un Objet avec tous les enfants de la ville de Londres, mais j'obtiens cet objectif aussi souvent qu'il y a des enfants avec cette ville (comme 10 ou 20 fois) c'est pas très efficace (si j'ai un jour des milliers d'accessoires avec cette ville?)Firebase orderByChild(). EqualTo() renvoie l'objet à plusieurs reprises

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) 

     }) 
} 

Répondre

1

de par sa conception, l'événement child_added sera appelé pour chaque enfant qui correspond à votre requête, consultez la documentation listening for child events.

Si vous souhaitez qu'un seul événement renvoie la liste complète des données à la place, vous devez utiliser l'écouteur d'événement value. De l'listen for value events documentation:

Fixation d'un observateur value à une liste de données renverra la liste complète des données comme un instantané unique que vous pouvez ensuite boucle vers accès individuels des enfants.

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

Vous pouvez également utiliser on('value', ...) comme vous le feriez pour un événement de l'enfant.