uni-app分页列表过长不渲染了?

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app分页列表过长不渲染了?

真机H5页面 发现分页列表数据过多不能渲染了,感觉是超过300条就不行了(可能和手机有关)不知道后面是否支持虚拟列表呢?目前我没看到相关的代码

1 回复

在uni-app中处理分页列表时,如果列表过长导致不渲染的问题,通常与内存管理、数据绑定和渲染性能有关。这里提供一个基本的分页加载和渲染的示例代码,帮助你解决这个问题。假设我们有一个需要从服务器分页获取数据的列表,每页显示一定数量的数据项。

1. 数据获取与分页逻辑

首先,我们需要定义一个方法来从服务器获取数据,并管理分页状态。

data() {
    return {
        page: 1, // 当前页码
        pageSize: 10, // 每页显示的数据条数
        list: [], // 存储所有已加载的数据
        loading: false, // 加载状态
        hasMore: true // 是否有更多数据
    };
},
methods: {
    async fetchData(page = this.page) {
        if (this.loading || !this.hasMore) return;
        this.loading = true;
        try {
            const response = await uni.request({
                url: 'https://api.example.com/data',
                method: 'GET',
                data: { page, pageSize: this.pageSize }
            });
            const newData = response.data.items;
            this.list = this.list.concat(newData);
            this.hasMore = newData.length === this.pageSize;
        } catch (error) {
            console.error('Fetch data error:', error);
        } finally {
            this.loading = false;
            this.page++;
        }
    },
    loadMore() {
        this.fetchData();
    }
}

2. 滚动事件监听

在页面的onReachBottom生命周期函数中监听用户滚动到底部的事件,并触发加载更多数据。

onReachBottom() {
    this.loadMore();
}

3. 渲染列表

在页面的模板部分,使用v-for指令渲染列表数据。

<template>
    <view>
        <scroll-view scroll-y="true" @scrolltolower="onReachBottom">
            <view v-for="(item, index) in list" :key="index" class="list-item">
                {{ item.name }}
            </view>
        </scroll-view>
        <view v-if="loading">加载中...</view>
        <view v-if="!hasMore && !loading">没有更多数据了</view>
    </view>
</template>

4. 样式

为列表项添加一些基本样式。

<style>
.list-item {
    padding: 10px;
    border-bottom: 1px solid #ddd;
}
</style>

总结

上述代码展示了如何在uni-app中实现分页加载和渲染列表。通过管理分页状态和监听滚动事件,可以有效避免一次性加载过多数据导致的渲染问题。此外,确保服务器端的分页接口能够正确返回分页数据也是关键。

回到顶部