从Firebase渲染FlatList中的数据

Yas*_*sir 5 firebase react-native firebase-realtime-database redux

我正在使用React Native 0.49。我有从firebase,用户列表中获取的数据users/,此列表中的每个项目都已设置为该firebase.database().ref('users/' + userId).set(userInfo)userId是uidcurrentUser的。

现在,我正在取回(在操作中-redux):

export function getPeople(){
    return (dispatch) => {
        dispatch(getPeopleRequest());
        getData().then(result => {
            dispatch(getPeopleSuccess(result.val()))
        })
        .catch(error => {
            dispatch(getPeopleFailure(error))
        }); 
    }
}

const getData = () => {
    const userRef = firebase.database().ref('users/').limitToFirst(20);
    return userRef.once('value');     
}
Run Code Online (Sandbox Code Playgroud)

在组件中,我试图在FlatList中呈现数据,但是它没有呈现任何内容,我不知道自己在做什么错:

componentDidMount(){
   this.props.getPeople();
}
_renderItem = ({ item }) => (

    <View style={{flex: 1}}>
        <Text>{item}</Text>
    </View>
);

render(){
    const { inProgress, people, error } = this.props.peopleData;
    return (
        <FlatList
            data={people}
            renderItem={this._renderItem} 
        />
    );
}
Run Code Online (Sandbox Code Playgroud)

当控制台日志时,people这是结果: {cpycwkz7exVBzmhaLEtHjMW66wn1: {…}, UbIITfUANmb63cYE2x7dZRZ0pfK2: {…}}

Shu*_*ngh 5

FlatList组件期望它的dataprop 是一个数组。您将它作为对象传递。您可以将其更改为对象数组。然后在您的_renderItem方法中item也将是一个对象并且它不能立即在<Text>.<Text>SOME_TEXT_NOT_AN_OBJECT</Text>

您可以将您的 people 对象转换为数组并将其传递给<FlatList这样的:

render(){
    const { inProgress, people, error } = this.props.peopleData;
    let ArrayOfPeopleObject = Object.values(people)
    return (
        <FlatList
            data={ArrayOfPeopleObject}
            renderItem={this._renderItem} 
        />
    );
}
Run Code Online (Sandbox Code Playgroud)

现在每个item_renderItem方法将是一个对象,你可以从任何键获取价值并使其在<Text>