uniapp切片
uniapp 切片实现方法
在 uniapp 中实现切片功能通常指将长列表或大数据集分割成小块进行加载,常见于分页加载或懒加载场景。以下是几种实现方式:
分页加载实现
通过 page 和 pageSize 参数控制数据加载范围,配合列表组件展示:
data() {
return {
listData: [],
page: 1,
pageSize: 10,
loading: false,
noMore: false
}
},
methods: {
loadData() {
if (this.loading || this.noMore) return
this.loading = true
uni.request({
url: 'api/list',
data: { page: this.page, size: this.pageSize },
success: (res) => {
this.listData = [...this.listData, ...res.data.list]
this.page++
this.noMore = res.data.list.length < this.pageSize
},
complete: () => this.loading = false
})
}
}
滚动加载实现
结合 scroll-view 或页面滚动事件监听触底行为:
<scroll-view scroll-y @scrolltolower="loadMore">
<view v-for="item in listData" :key="item.id">{{item.name}}</view>
<view v-if="loading">加载中...</view>
<view v-if="noMore">没有更多了</view>
</scroll-view>
虚拟列表优化
对于超长列表推荐使用 uni-list 组件或手动实现虚拟滚动:
// 计算可视区域数据
getVisibleItems() {
const start = Math.floor(scrollTop / itemHeight)
const end = start + Math.ceil(viewHeight / itemHeight) + buffer
return this.fullList.slice(start, end)
}
性能优化建议
- 使用
key属性优化列表渲染 - 分页大小建议控制在 10-20 条之间
- 滚动加载时添加防抖处理
- 大数据量考虑使用 WebWorker 处理计算
注意事项
- 安卓平台滚动性能需要特别测试
- 微信小程序有 setData 数据量限制
- iOS 平台注意滚动回弹效果处理
以上方法可根据具体业务需求组合使用,建议优先测试目标平台的性能表现。







