代码之家  ›  专栏  ›  技术社区  ›  ggDeGreat

Firebase和React Native Flatlist之间的JSON格式

  •  0
  • ggDeGreat  · 技术社区  · 6 年前

    这是存储在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
               extraData={this.props}
               data={this.props.users}
               keyExtractor={(item, index) => index.toString()}
               renderItem={({ item }) => (
        ...
    

    我怎么用 firebase.database().ref() 然后在平面列表中返回所需的数据?

    1 回复  |  直到 6 年前
        1
  •  0
  •   iRiziya    6 年前

    你可以试试这样的方法:

    我的第一个 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});
    });
    

    现在你可以填充 arrData 在你的 FlatList ListView .

    希望对你有帮助!