Reactjs Firestore的公寓名单?自然反应

Reactjs Firestore的公寓名单?自然反应,reactjs,firebase,react-native,google-cloud-firestore,Reactjs,Firebase,React Native,Google Cloud Firestore,我相信这是很常见的事情,但似乎无法解决。每个用户在Firestore中都有一个“books”数组,这就是我希望在Flatlist中返回的内容,我哪里出错了?firebase的第一天,所以我很确定这是基本的。谢谢:) {db.collection('users').doc(userEmail.data()} numColumns={2} ListentyComponent={ 在下面添加书籍 } renderItem={({item})=>( 书 )} /> 这就是数据库: 问题在于,对fire

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

{db.collection('users').doc(userEmail.data()}
numColumns={2}
ListentyComponent={
在下面添加书籍
}
renderItem={({item})=>(
书
)}
/>
这就是数据库:


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

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>
        )}
    />
    )
}
const组件=()=>{
const[data,setData]=useState();
const getData=async()=>{
const snapshot=await db.collection('users').doc(userEmail.get())
setData(snapshot.data())
}
useffect(()=>{
getData()
}, [])
返回(
(
书
)}
/>
)
}

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

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>
        )}
    />
    )
}
const组件=()=>{
const[data,setData]=useState();
const getData=async()=>{
const snapshot=await db.collection('users').doc(userEmail.get())
setData(snapshot.data())
}
useffect(()=>{
getData()
}, [])
返回(
(
书
)}
/>
)
}

这一条有一些错误,但请欣赏其背后的逻辑。对useEffect在做什么感到困惑?它抛出了错误,所以我删除了它。删除它后,我得到错误“undefined is not a object”(未定义不是对象)。另一个问题,有没有办法一直到书本级而不是在电子邮件级停止?现在你在.doc(userEmail)之后停止。谢谢!如果你删除.doc(userEmail),firebase将返回用户的所有记录。在这种情况下,我建议创建一个新的集合,即books,并通过id与用户链接。useEffect是函数组件的React hook。如果您使用的是class component,请改用componentDidMount。好的,谢谢您的澄清。我希望在添加新书时更新列表,ri现在为了显示新添加的书籍,我需要重新加载应用程序。我会使用onSnapshot还是什么?是的,只使用onSnapshot获取一些错误,但请欣赏它背后的逻辑。对useEffect的作用感到困惑吗?它抛出了错误,所以我删除了它。删除它后,我得到的错误是“未定义”“一个物体”。还有一个问题,有没有一种方法可以一直到书本层面而不是停留在电子邮件层面?现在,您正在.doc(userEmail)之后停止。非常感谢。如果您删除.doc(userEmail),firebase将返回用户的所有记录。在这种情况下,我建议创建一个新的集合,它是books,并通过id与用户链接。useEffect是React hook for functional component。如果您使用的是类组件,请改用componentDidMount。好的,谢谢您的澄清。我想在添加新书时更新列表,现在为了显示新添加的书籍,我需要重新加载应用程序。我会用onSnapshot还是什么?是的,用onSnapshot就可以了。你是如何以记录键的形式传递电子邮件的?你是如何以记录键的形式传递电子邮件的?