繁体   English   中英

如何在本机加载屏幕后立即通过从 Firestore 检索的数据设置 state 变量?

[英]How to set state variable by data retrieved from firestore immediately after screen is loaded in react native?

我想从 Firestore 中检索数据,然后将文档快照数据设置为 state 变量。 我将代码放在useEffect()中。 state 变量,这里的document ,在屏幕加载时未定义,只能在我刷新应用程序后设置。 如何在屏幕加载后立即设置变量? 下面是代码片段:

function ToBeReadDetails({route}){
const [document, setDocument] = useState();
const scrollView = useRef();
const bookRef = firestore().collection('BookStore').doc(Type).collection('Books').doc(id); 

useEffect(()=>{
        bookRef.get().then(doc=>{
            setDocument(doc.data());
        });
        console.log(document); 
    }, []);
return(
        <View>
            <ScrollView
            ref={scrollView}
            showsVerticalScrollIndicator={false}
            contentContainerStyle={{alignItems:"center"}}
            >
                <BookDetails Author={document['Author']} 
                ...

在第一个渲染文档中将始终未定义。 因为从 Firestore 获取数据需要时间。 这可能需要 5 毫秒或 500 毫秒,具体取决于您无法控制的各种元素、延迟……等。

您的问题的解决方案是解决这个问题,或者您有一个加载 state,它会显示一个加载器,直到您获得文档,或者只有在您获得文档时才会渲染的条件渲染

像这个前。

document['Author'] && (<BookDetails Author={document['Author']})

在您的渲染中,您必须等待 state 发生变化。 像这样,

return !document ?

    <View>Loading...</View>
    :
    <View>
            <ScrollView
            ref={scrollView}
            showsVerticalScrollIndicator={false}
            contentContainerStyle={{alignItems:"center"}}
            >
                <BookDetails Author={document['Author']} 
            </ScrollView>
    </View>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM