javascript - React Native Flatlist 返回错误的空行数

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

当我运行下面的代码时,它显示 3 个空行。它应该显示两行,每行都有颜色和结束日期,我想使用“Parent”作为unique键。 “Parent”是 Firebase 在使用“.push”将颜色和结束日期推送到 Firebase 时创建的唯一键。

我尝试了各种方法来让它显示。当我让“renderItems”返​​回“this.state.list”时,我确实获得了要显示的内容,但是返回了 3 行,所有行都具有相同的数据,这是控制台日志上最后一个数组的内容。

我非常感谢一些帮助来使其正常工作。

这是代码、Firebase 数据库的副本和 console.log。请注意,Firebase“目标”已更改为“颜色”。

import React, { Component } from 'react';
import { Text, FlatList, View, Image } from 'react-native';
import firebase from 'firebase';
import { Button, Card, CardSection } from '../common';
import styles from '../Styles';

class List extends Component {

  static navigationOptions = {
    title: 'List',
  }

  constructor(props) {
    super(props);

    this.state = {
      list: [],
    };
  }

componentDidMount() {
    const { currentUser } = firebase.auth();
    const Parent = firebase.database().ref(`/users/${currentUser.uid}/Profile`);

    Parent.on(('child_added'), snapshot => {
        this.setState({ list: [snapshot.key, snapshot.val().color, snapshot.val().enddate] });

    console.log(this.state.list);
    });
}

keyExtractor = (item, index) => index;

render() {
  return (
    <Card>
      <View style={{ flex: 1 }}>
        <FlatList
          data={this.state.list}
          keyExtractor={this.keyExtractor}
          extraData={this.state}
          renderItem={({ item }) => (
            <Text style={styles.listStyle}>
                { item.color }
                { item.enddate }
            </Text>
          )}
        />
      </View>

      <CardSection>
        <Button
          style={{
            flex: 1,
            flexDirection: 'row'
          }}

          onPress={() =>    this.props.navigation.navigate('NextPage', { name: 'user' })}
          title="Go to next page"
        >
          Go to next page
        </Button>
      </CardSection>
    </Card>
    );
  }
}

export { List };

Console log entry Firebase database

最佳答案

这是存储列表的正确方法

componentDidMount() {
    const { currentUser } = firebase.auth();
    const Parent = firebase.database().ref(`/users/${currentUser.uid}/Profile`);

    Parent.on(('child_added'), snapshot => {
        const newChild = {
           key: snapshot.key, 
           color: snapshot.val().color, 
           enddate: snapshot.val().enddate
        }
        this.setState((prevState) => ({ list: [...prevState.list, newChild] }));

    console.log(this.state.list);
    });
}

和你的 keyExtractor

keyExtractor = (item, index) => item.key;

关于javascript - React Native Flatlist 返回错误的空行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667239/

相关文章:

firebase - 如何将 Flutter TextField 与 Firestore 字段同步?

android - 通过向查询添加监听器返回的 DataSnapshot 是否不同于直接添加到 DatabaseReference 的 DataSnapshot

javascript - React Native - 如何从子组件调用函数?

javascript - 仅保留解决并忽略被拒绝的 Promise 的值

javascript - 从 bash 脚本运行 Node : output console. 日志

javascript - 如何干燥我的 Rails/AJAX/Bootstrap 3 模态错误处理?

swift - 在 firebase 数据库中搜索数据

javascript - 如何在将数据导出到 Excel 时更改文件名?

firebase - 尝试在 React Native 上访问 Firebase 时出现 'nativeFlushQueueImmediate' 中的 C++ 异常

android - React Native 样式问题。不变的违反