我正试图从Firestore的一个集合中提取文档,并通过一个平面列表显示出来.但它显示了一个加载循环(IDK,它实际上被称为)!

如果有什么不同,我会用自己的手机测试这个应用程序.(我对此很陌生)

Here is a screenshot of my items screen where items are to be displayed: enter image description here

这是我的代码:

const Items = () => {
    const [isLoading, setIsLoading] = useState(false)
    const [isMoreLoading, setIsMoreLoading] = useState(false)
    const [last, setLast] = useState(null)
    const [items, setItems] = useState([])

    let onEndReachedCalledDuringMomentum = false;

    const itemsLoc = db.collection('items')

    useEffect(() => {
        getItems();
    }, []);

    getItems = async () => {
        setIsLoading(true);
        const snapshot = await itemsLoc.get();

        if(!snapshot.empty){
            let newItems = [];
            setLast(snapshot.docs[snapshot.docs.length-1]);

            for (let i = 0; i < snapshot.docs.length; i++){
                newItems.push(snapshot.docs[i].data());
            }

            setItems(newItems)
        }else{
            setLast(null);
        }
        setIsLoading(false);
    }

    getMore = async () => {
        if (last){
            setIsMoreLoading(true);

            let snapshot = await itemsLoc.orderBy('id').startAfter(last.data().id).limit(3).get();

            if(!snapshot.empty){
                let newItems = items;
                setLast(snapshot.docs[snapshot.docs.length - 1]);
                for (let i = 0 ; i < snapshot.docs.length; i++){
                    newItems.push(snapshot.docs[i].data());
                }

                setItems(newItems);
                if(snapshot.docs.length < 3) setLast(null);
            }else{
                setLast(null)
            }
            setIsMoreLoading(false);
        }

        onEndReachedCalledDuringMomentum = true;
    }

    renderList = ({name,desc,image}) => {
        return(
            <View style={styles.container}>
                <Image source={{uri: image}} style={styles.imageContainer}/>
                <View style={styles.itemInfoContainer}>
                    <View>
                        <Text style={styles.title}>{name}</Text>
                    </View>
                    <View>
                        <Text style={styles.description}>{desc}</Text>
                    </View>
                </View>
            </View>
        )
    }

    renderFooter = () => {    
        if (isMoreLoading) {return true;}
        return <ActivityIndicator size="large" color="#64aeae" style={{ marginBottom:10 }}/>
    }

    onRefresh = () => {
        getItems();
    }

    return(
        <View style={{marginTop: 20}}>
            <FlatList 
                showsVerticalScrollIndicator={false}
                data={items}
                keyExtractor={item => item.id}
                renderItem={({item}) => renderList(item)}
                ListFooterComponent = {renderFooter}
                initialNumToRender={3}
                onEndReachedThreshold = {0.1}
                refreshing={
                    <RefreshControl 
                        refreshing = {isLoading}
                        onRefresh = {onRefresh}
                    />
                }
                onMomentumScrollBegin={() => onEndReachedCalledDuringMomentum = false}
                onEndReached = {() => {
                    if (!onEndReachedCalledDuringMomentum && !isMoreLoading){
                        getMore();
                    }
                }}
                />
        </View>

推荐答案

我在firebase中错误地引用了这些图像.我使用了存储图像的本地存储路径,而不是使用图像的给定URL.

Javascript相关问答推荐

如何解决(不忽略)reaction详尽的linter规则,而不会在获取数据时导致无限的reender循环

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

如何通过onClick为一组按钮分配功能;

按下同意按钮与 puppeteer 师

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

从WooCommerce Checkout Country字段重新排序国家,保持国家同步

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

将旋转的矩形zoom 到覆盖它所需的最小尺寸&S容器

Javascript json定制

环境值在.js文件/Next.js中不起作用

在开发期间,Web浏览器如何运行&qot;.jsx&qot;文件?

JavaScript:如果字符串不是A或B,则

Phaser3 preFX addGlow不支持zoom

将多个文本框中的输出合并到一个文本框中

如何使用抽屉屏幕及其子屏幕/组件的上下文?

Socket.IO在刷新页面时执行函数两次

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

在单击按钮时生成多个表单时的处理状态

使用静态函数保存 node 前的钩子