2017-12-19 1 views
1

Ich habe Probleme beim Abrufen von Daten aus Firebase spezifischen Ort. Ich habe einen Zustand ("Favoriten", der vom Firebase übernommen wurde). Favoritenstatusobjekte enthalten nur eindeutige Firebase-Schlüssel, die beim Klicken auf "Post zu Favoriten hinzufügen" (ich habe Postdaten in Firebase) gedrückt wurden. Also, wie könnte ich mehrere Post-Daten mit diesen eindeutigen Schlüssel, die in "Favoriten" -Knoten sind abrufen?So erhalten Sie mehrere Daten von Firebase nur mit eindeutigen Schlüsseln in reaktiven nativen

Code:

class MyFavouriteScreen extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     favourites: [], 
     favouritesPosts: [], 
    }; 
    } 

    componentWillMount() { 
    let user = firebase.auth().currentUser.uid; 
    favouritesFire = firebase.database().ref('users').child(user + '/favourites'); 

    let that = this; 
    favouritesFire.once("value", function(snapshot){ 
     let favs = []; 
     snapshot.forEach(function(data){ 
     let fav = { 
      id: data.key 
     } 
     favs.push(fav); 
     that.setState({favourites: favs}); 
     }); 
    }); 
    // ^- there i get those unique keys and now i need to retrieve post data with those keys and show them in render function 
    } 

    render() { 
    const { navigate } = this.props.navigation; 
    return (
     <View style={styles.mainContainer}> 
     <MyNavScreen banner="Favoritai" navigation={ navigate } /> 
     <ScrollView style={styles.wrapper}> 
     {this.state.favouritesPosts.map(post => { 
     return (
      <TouchableOpacity post={post} style={styles.postWrapper}> 
      <View style={styles.postImageWrapper}> 
       <Image 
       source={{uri: post.image}} 
       style={{flex: 1}} /> 
      </View> 
      <View style={styles.shopContent}> 
       <Text style={styles.postTitle}>{post.title}</Text> 
       <Text style={styles.postText}>{post.text}</Text> 
      </View> 
      <TouchableOpacity style={styles.starWrapper}> 
       <Text style={styles.star}>{'-'}</Text> 
      </TouchableOpacity> 
      </TouchableOpacity> 
     ); 
     })} 
     </ScrollView> 
     </View> 
    ); 
    } 
} 
+0

hilft, was ist Ihr Code und Datenstruktur? – Ben

+0

Hey Ben danke für die Antwort. habe meinen Code hinzugefügt – MGalmostcoder

+0

@Ben Kannst du helfen? – MGalmostcoder

Antwort

0

Firebase ist nicht so gut mit Anfragen zu beschäftigen. Ich würde vorschlagen, dass Sie so etwas wie dieses

favouritesFire.once("value", snapshot => { 
    snapshot.map(item => { // it will pass through all your snapshot items 
    firebase.database().ref(`yournode/${item.key}`) //for each item you must query again in firebase 
    .once('value') 
    .then(itemFiltered => console.log('Your item: ', itemFiltered); // then you get your result 
    }) 
}) 

Hoffe, dass es

Verwandte Themen