React Native / Firebase:从多个" .on"中推送数据电话

时间:2018-01-29 11:09:37

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

我在从多个Firebase .on调用中获取数据时遇到一些困难。问题是我正在重复列表,因为我正在将数据推送到一个名为items的数组中,但我不确定在更新数据(导致重复)时如何清除此数组。我尝试过使用componentWillUpdate()componentDidUpdate()生命周期方法,但.on调用似乎在没有提醒的情况下进行更新。

我会将items数组放在其中一个.on个调用中,但后来我不知道如何将数据从其他调用中推送到其中#。调用。

我的数据库结构的方式是有些对象称为" cars&#34 ;,每个" cars"对象可以有多个属性,最重要的(对我而言)是" model"。有几辆车有相同型号,但我试图得到最后的"汽车"每个模型的对象。所以,如果我有Accord,Civic,Sentra等,我想要最后一个Accord,最后一个Civic,最后一个Sentra,依此类推。

这是我目前使用的代码:

import React from 'react'; 
import { View, Text, FlatList } from 'react-native'; 
import firebase from 'react-native-firebase'; 
import TypeItem from './TypeItem'; 

DB = firebase.database().ref('cars/'); 


export default class LatestType extends React.PureComponent {
    constructor(props) {
        super(props); 
        this.state = {
            data: []
        }; 
        this.pushReports = this.pushReports.bind(this); 
        this.makeRemoteRequest = this.makeRemoteRequest.bind(this); 
    }

    makeRemoteRequest = () => {
        let items = []; 
        models.forEach(element => {  //models is an array of the list of models
            this.pushReports(element, items); 
        });
        console.log("These are the items from Status Screen: ",items); 
    }

    pushReports = (model, items) => {
        let item = {}; 
        DB.orderByChild("model")
        .equalTo(model) 
        .limitToLast(1)
        .on("child_added", snap => {
            item = {
                key: snap.key, 
                type: snap.val().type, 
                model: snap.val().model, 
            }
            items.push(item); 
            this.setState({
                data:items
            });
        }); 
    }

    componentWillMount(){
        this.makeRemoteRequest(); 
    }

    componentWillUnmount(){
        DB.off(); 
    }



    render() {
        return (
            <View>
                <FlatList 
                    data={this.state.data}
                    renderItem={({item}) => <TypeItem item={item} />}
                />
            </View>
        );
    }
}

1 个答案:

答案 0 :(得分:1)

尝试

this.setState({
  data:[...items]
});

而不是你的

this.setState({
  data:items
});