Firebase和React Native Flatlist之间的JSON格式

时间:2018-08-03 05:14:17

标签: react-native react-native-flatlist react-native-firebase

这是将数据存储在Firebase实时数据库中的

"Users" : {
  "Joe" : {
    "name" : "xxx",
    "email" : "xxx"
 },
 "Matt" : {
    "name" : "xxx",
    "email" : "xxx"
 }
}

这是React Native Flatlist中的数据需求

 Users : [
  {
    id : "Joe"
    name : "xxx",
    email : "xxx",
  },
  {
    id : "Matt"
    name : "xxx",
    email : "xxx",
  }
]

componentDidMount()中的某个地方。

firebase.database("Users").ref().once('value').then(function(snapshot) {
    var arr = _.values(snapshot.val());
    this.setState({ users: JSON.stringify(arr) });
})

在渲染Flatlist中:

   <FlatList
           extraData={this.props}
           data={this.props.users}
           keyExtractor={(item, index) => index.toString()}
           renderItem={({ item }) => (
    ...

如何使用firebase.database().ref()并返回平面列表中所需的数据?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

首先进入我的constructor

constructor(props) {
    super(props);

    this.state = {
        arrData:[]
    };
}

然后从Firebase获取数据

var ref = firebase.database().ref("Users"); //Here assuming 'Users' as main table of contents   

ref.once('value').then(snapshot => {
    // console.log(snapshot.val());

     // get children as an array
     var items = [];
     snapshot.forEach((child) => {
       items.push({
          id: child.val().id,
          name: child.val().name,
          email: child.val().email,
          phone: child.val().phone,
          status: child.val().status,
          user_type: child.val().user_type

       });
    });

    this.setState({ arrData: items});
});

现在您可以在arrDataFlatList中填充ListView

希望对您有帮助!

答案 1 :(得分:0)

在这里,我得到了问题的数组,该数组由用户发布在对象中,然后创建一个数组,然后将该数组分配给变量。

componentDidMount(){
  let user =  firebase.auth().currentUser ;
  let uid = user.uid;
  firebase.database().ref('Problems').orderByChild('userid').equalTo(uid)
  .once('value' )
  .then(snapshot => {
     // console.log(snapshot.val());
    var items = [];
     snapshot.forEach((child) => {
       items.push({
          id: child.key,
          problemDescription: child.val().problemDescription,
          problemTitle: child.val().problemTitle,
          problemstatus: child.val().problemstatus,
          timeanddate: child.val().timeanddate,
       });
    });
    console.log(items);
    this.setState({problmes: items}); 
    this.setState({isloading:false});
  })
  .catch(error => console.log(error));

}