使用Firebase数据填充ReactNative ListView

时间:2017-02-03 15:28:03

标签: firebase react-native firebase-realtime-database

我已经挣扎了几天才能让这个工作。我想用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}/>
        );
      }

    }

数据结构如下所示: enter image description here

所以我在这里尝试用List&#34; forename&#34;填充ListView的每一行。每个&#34;简介的字符串&#34;目录(0,1,2)。 但是在我的警报()上我返回了[object Object],[object Object],[object Object],这必须意味着它只是将目录作为对象从&#34; profiles_info&#34;而不是每个&#34; forename&#34;这些目录中的字符串。

这是我被困的地方,我希望有人可以对此有所了解。我知道解决方案应该是什么,我只是不知道如何在代码中应用它。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您正在将对象推送到配置文件数组中,因此警报显示对象是有意义的:

profiles.push({
    name: child.val().forename,
    _key: child.key
});

如果您使用alert(JSON.stringify(profiles));代替alert(profiles);,则会看到包含字段namekey的对象数组。访问profiles[0].name会给出实际名称。

旁注,如果您使用console.log代替alert,则会获得更有意义的信息。

答案 1 :(得分:0)

尝试以下教程。可能对你有所帮助。

react-native-firebase-tutorial-list