我已经挣扎了几天才能让这个工作。我想用Rebase Native中的ListView填充来自Firebase数据库的数据。我有这个设置:
const ListItem = require('./profileRow');
var database = firebase.database();
var userId, dataKey;
class Selection extends Component {
constructor(props) {
super(props);
userId = firebase.auth().currentUser.uid;
this.dataRef = firebase.database().ref('/users/' + userId + '/profiles_info');
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
})
};
}
listenForProfiles(dataRef){
dataRef.on('value', (snap) => {
var profiles = [];
snap.forEach((child) => {
profiles.push({
name: child.val().forename,
_key: child.key
});
});
alert(profiles);
this.setState({
dataSource: this.state.dataSource.cloneWithRows(profiles)
});
});
}
componentDidMount() {
this.listenForProfiles(this.dataRef);
}
render() {
return (
<Image source={require('../assets/bg.png')} style={styles.container}>
<View style={{flex: 1, flexDirection:'column'}}>
<Text>
Select a profile to view:
</Text>
</View>
<View style={{flex: 1}}>
<ListView dataSource={this.state.dataSource} renderRow={this._renderItem.bind(this)} enableEmptySections={true} style={styles.listview}> </ListView>
</View>
</Image>
);
}
_renderItem(item) {
return (
<ListItem item={item}/>
);
}
}
所以我在这里尝试用List&#34; forename&#34;填充ListView的每一行。每个&#34;简介的字符串&#34;目录(0,1,2)。
但是在我的警报()上我返回了[object Object],[object Object],[object Object]
,这必须意味着它只是将目录作为对象从&#34; profiles_info&#34;而不是每个&#34; forename&#34;这些目录中的字符串。
这是我被困的地方,我希望有人可以对此有所了解。我知道解决方案应该是什么,我只是不知道如何在代码中应用它。
提前致谢!
答案 0 :(得分:1)
您正在将对象推送到配置文件数组中,因此警报显示对象是有意义的:
profiles.push({
name: child.val().forename,
_key: child.key
});
如果您使用alert(JSON.stringify(profiles));
代替alert(profiles);
,则会看到包含字段name
和key
的对象数组。访问profiles[0].name
会给出实际名称。
旁注,如果您使用console.log
代替alert
,则会获得更有意义的信息。
答案 1 :(得分:0)
尝试以下教程。可能对你有所帮助。