Ошибка при получении правильного пути из Firebase - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок, чтобы реагировать нативно, я работаю над извлечением списка из firebase.Но я застрял на пути к объекту.я не знаю, как указать путь к идентификатору события, который показан на рис.enter image description here

Вот код, которому я хочу дать правильный путь.Любая помощь будет оценена.

firebase.database().ref('/events').child('/friends').once('value').then((snapshot) =>{
    let data = snapshot.val();
    let items = object.values(data);
    allUserList.push(items);
    this.setState({allFriendList: allFriendList});

}

У меня есть несколько ключей, чтобы увидеть изображение enter image description here

Вот код плоского списка, в котором я хочу показатьсписок друзей

<FlatList style={{}} keyboardShouldPersistTaps={'always'}
data={this.state.allFriendList}
ItemSeparatorComponent={this.renderSeparator}
renderItem={({ item }) => {
        return (
        <TouchableOpacity onPress={() => this.goToNextScreen(item)}>
        <View style={{
                flexDirection: 'row', paddingBottom: 5, paddingTop: 5,
                justifyContent: 'space-between', alignItems: 'center'
            }}>
    }
}

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Вы можете просто сделать полный путь в ссылке:

firebase.database().ref('/events/friends/whatever-key')
    .once('value').then((snapshot) =>{
        /// Whatever code
    });
0 голосов
/ 04 декабря 2018

Если вы хотите показать список друзей для определенного события, и вы знаете ключ этого события, вы можете сделать что-то вроде:

let eventKey = '-LRuFQAsleScaEK2MqXu';
let eventRef = firebase.database().ref('events').child(eventKey);
eventRef.child('friends').once('value').then((snapshot) =>{
  let allFriendList = [];
  snapshot.forEach((friendSnapshot) => {
    let data = friendSnapshot.val();
    allUserList.push(data);
  });
  this.setState({allFriendList: allFriendList});
});

Некоторые изменения:

  • Этот код прослушивает только определенный путь /events/-LRuFQAsleScaEK2MqXu/friends.Фактически, он мог использовать этот путь для прослушивания, то есть firebase.database (). Ref ('/ events / -LRuFQAsleScaEK2MqXu / friends'). Once ('value' ... `
  • The snapshot мы получаем из этого несколько друзей, поэтому мы зацикливаемся на них с snapshot.forEach().
  • Как только мы добавили всех друзей в список, мы вызываем setState, чтобы сообщить React о них.

В комментариях вы указываете, что хотите объединить все списки друзей, с которыми вы можете делать:

let eventsRef = firebase.database().ref('events');
eventRef.once('value').then((snapshot) =>{
  let allFriendList = [];
  snapshot.forEach((eventSnapshot) => {
    eventSnapshot.child('friends').forEach((friendSnapshot) => {
      let data = friendSnapshot.val();
      allUserList.push(data);
    });
  });
  this.setState({allFriendList: allFriendList});
});

Но я весьма рекомендую изменить / дополнитьВаша модель данных для этого варианта использования. Этот код может работать, но считывает намного больше данных, чем необходимо. Он также может читать дублирующихся друзей, если один и тот же друг присутствует в большем количестве событий. Если вам нужен глобальный список друзей,Я бы точно сохранил это в базе данных: список пользователей, возможно, с идентификаторами событий, с которыми они дружат.

0 голосов
/ 04 декабря 2018

Личные предпочтения, использование подхода [key] хорошо работает для пользовательских имен ключей.

Например, data.[key].name выдаст ваши результаты, если вы знаете ключ.

Если вы не знаете этот ключ (LRjSl...), вы можете перебрать объект friends:

for (var key in data) {
    data[key].name //will be Shabnam
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...