从 Firebase 在平面列表中渲染数据



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

现在我正在取回(在操作中 - 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');     
}

组件中,我正在尝试在 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} 
        />
    );
}

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

FlatList组件期望其data道具是一个数组。您正在将其作为对象传递。您可以将其更改为对象数组。然后在_renderItem方法中,item也将是一个对象,并且不能立即在<Text>中呈现,您必须从item对象中提取文本值,然后将其呈现为:<Text>SOME_TEXT_NOT_AN_OBJECT</Text>

您可以将人员对象转换为数组并将其传递给<FlatList,如下所示:

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

现在,_renderItem方法中的每个item都将是一个对象,您可以从任何键中提取值并将其呈现在<Text>中。

平面列表数据需要数组中的每个对象都有一个键 您可以像这样转换 Firebase 结果:

Object.entries(peopleFromFirebase).map(item => ({...item[1], key: item[0]}));

所以来自火力基地的 json 是这样的:

{
  cpycwkz7exVBzmhaLEtHjMW66wn1: {
    name: 'wade owen watts', 
    phone:'+447...'
  }, 
  UbIITfUANmb63cYE2x7dZRZ0pfK2: {
    name: 'Helen Harris', 
    phone:'+448...'
  }
}

成为:

[
  {
    key: 'cpycwkz7exVBzmhaLEtHjMW66wn1',
    name: 'wade owen watts', 
    phone:'+447...'
  }, 
  {
    key:'UbIITfUANmb63cYE2x7dZRZ0pfK2',
    name: 'Helen Harris', 
    phone:'+448...'
  }
]

平面列表,除了对象数组,但 firebase 将数据作为映射返回,如 {key: value} 对,所以你应该把这个地图转换为数组,你可以安装 lodash 模块并使用 _.values() 函数来做到这一点

相关内容

  • 没有找到相关文章

最新更新