uniapp列表分页
uniapp列表分页实现方法
基础分页逻辑
在uniapp中实现列表分页需要结合前端和后端逻辑。前端负责发送分页请求和渲染数据,后端负责处理分页查询并返回对应数据。
data() {
return {
listData: [], // 列表数据
pageSize: 10, // 每页数量
currentPage: 1, // 当前页码
total: 0, // 总数据量
loading: false, // 加载状态
noMore: false // 是否没有更多数据
}
}
获取分页数据
通过uni.request或封装后的API请求获取分页数据。建议使用async/await方式处理异步请求。
methods: {
async getListData() {
if (this.loading || this.noMore) return
this.loading = true
try {
const res = await uni.request({
url: '你的API地址',
data: {
page: this.currentPage,
pageSize: this.pageSize
}
})
if (res.data.list.length < this.pageSize) {
this.noMore = true
}
this.listData = [...this.listData, ...res.data.list]
this.total = res.data.total
this.currentPage++
} catch (e) {
console.error(e)
} finally {
this.loading = false
}
}
}
上拉加载更多
在页面的onReachBottom生命周期中触发加载更多数据。
onReachBottom() {
this.getListData()
}
下拉刷新
使用uni.startPullDownRefresh和uni.stopPullDownRefresh实现下拉刷新功能。
onPullDownRefresh() {
this.currentPage = 1
this.listData = []
this.noMore = false
this.getListData().finally(() => {
uni.stopPullDownRefresh()
})
}
页面初始化加载
在onLoad或onShow生命周期中初始化加载第一页数据。
onLoad() {
this.getListData()
}
列表渲染优化
使用scroll-view或原生列表渲染大量数据时,应考虑性能优化。
<scroll-view
scroll-y
@scrolltolower="getListData"
style="height: 100vh"
>
<view v-for="(item, index) in listData" :key="index">
<!-- 列表项内容 -->
</view>
<view v-if="loading">加载中...</view>
<view v-if="noMore">没有更多数据了</view>
</scroll-view>
分页组件封装
对于复杂项目,建议将分页逻辑封装为mixin或组件,提高代码复用性。
// paginationMixin.js
export default {
data() {
return {
listData: [],
pageSize: 10,
currentPage: 1,
total: 0,
loading: false,
noMore: false
}
},
methods: {
async fetchData() {
// 抽象获取数据方法,由具体页面实现
},
resetPagination() {
this.currentPage = 1
this.listData = []
this.noMore = false
}
}
}
注意事项
- 确保后端API支持分页参数,通常需要page和pageSize两个参数
- 处理网络请求错误情况,避免因错误导致分页状态异常
- 大数据量列表应考虑虚拟滚动优化性能
- 分页参数命名应与后端保持一致,避免混淆
- 移动端分页通常采用无限滚动模式,而非传统页码分页
通过以上方法可以在uniapp中实现高效、流畅的列表分页功能,适用于新闻列表、商品列表等各种场景。







