从 firebase 获取正确路径时出错
2018-12-04
262
我是 React Native 的新手,我正在努力从 Firebase 获取列表。但我无法为对象提供路径。我不知道如何为图中所示的事件 ID 提供路径。
以下是我想要提供正确路径的代码。任何帮助都将不胜感激。
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});
}
这是我想要显示好友列表的 flatlist 的代码
<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个回答
您只需在 ref 中输入完整路径即可:
firebase.database().ref('/events/friends/whatever-key')
.once('value').then((snapshot) =>{
/// Whatever code
});
Jason Byrne
2018-12-04
如果您想要显示某个事件的好友列表,并且您知道该事件的密钥,您可以执行以下操作:
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'...` -
我们从中获取的
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});
});
但我 强烈 建议更改/增强此用例的数据模型。此代码可能有效,但读取的数据远远超过所需。如果同一个朋友存在于更多事件。如果您想要一个全局好友列表,我会将其精确地存储在数据库中:用户列表,可能还有他们好友的事件的事件 ID。
Frank van Puffelen
2018-12-04
个人偏好,使用
[key]
方法非常适合自定义键名。
例如,如果您知道键,
data.[key].name
将产生您的结果。
如果您不知道该键 (
LRjSl...
),您可以迭代
friends
对象:
for (var key in data) {
data[key].name //will be Shabnam
}
mewc
2018-12-04