【问题标题】:FlatList with Firestore? React Native带有 Firestore 的平面列表?反应原生
【发布时间】:2020-08-12 02:24:28
【问题描述】:

我确信这是很常见但似乎无法弄清楚的事情。每个用户在 Firestore 中都有一个“books”数组,这就是我想要在 Flatlist 中返回的内容,我哪里出错了? Firebase 的第一天,所以我很确定它是基本的。谢谢:)

                <FlatList
                    data={() => { db.collection('users').doc(userEmail).data() }}
                    numColumns={2}
                    ListEmptyComponent={
                        <View style={styles.flatListEmpty}>
                            <Text style={{ fontWeight: 'bold' }}>Add Books Below</Text>
                        </View>
                    }
                    renderItem={({ item }) => (
                        <View style={styles.flatListStyle}>
                            <Text>book</Text>
                        </View>
                    )}
                />

那么这是数据库:

【问题讨论】:

  • 您是如何将电子邮件作为记录密钥传递的?

标签: reactjs firebase react-native google-cloud-firestore


【解决方案1】:

问题是对 firebase 的查询是异步操作,因此您需要解决该操作,然后将结果存储到组件的状态并将该状态分配给平面列表。示例:

const Component = () => {

    const [data, setData] = useState();

    const getData = async () => {
        const snapshot = await db.collection('users').doc(userEmail).get()

        setData(snapshot.data())
    }

    useEffect(() => {
        getData()
    }, [])

    return (
        <FlatList
        data={data.books}
        numColumns={2}
        ListEmptyComponent={
            <View style={styles.flatListEmpty}>
                <Text style={{ fontWeight: 'bold' }}>Add Books Below</Text>
            </View>
        }
        renderItem={({ item }) => (
            <View style={styles.flatListStyle}>
                <Text>book</Text>
            </View>
        )}
    />
    )
}

【讨论】:

  • 在这方面遇到了一些错误,但欣赏其背后的逻辑。对 useEffect 在做什么感到困惑?它抛出错误,所以我将其删除。删除它后,我收到错误“未定义不是对象”。另一个问题,有没有办法一直到书籍级别而不是在电子邮件级别停止?现在你在 .doc( userEmail)。谢谢!
  • 如果您删除 .doc(userEmail),firebase 将返回用户的所有记录。在这种情况下,我建议创建一个新的集合,即书籍并通过 id 与用户链接。而 useEffect 是功能组件的 React 钩子。如果您使用的是类组件,请改用 componentDidMount。
  • 好的,谢谢您的澄清。我希望在添加新书时更新列表,现在为了显示新添加的书,我需要重新加载应用程序。我会只使用 onSnapshot 之类的吗?
  • 是的,使用 onSnapshot 就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2021-10-22
相关资源
最近更新 更多