组件
VirtualList 虚拟滚动列表

VirtualList 虚拟滚动列表

虚拟滚动列表组件,用于高效展示大量数据,通过动态渲染可视区域内的元素来提升性能。

何时使用

  • 需要展示大量数据时,避免一次性渲染所有数据导致性能问题。
  • 列表项高度不固定,需要动态计算和优化渲染的场景。
  • 需要支持无限滚动加载更多数据的场景。

代码演示

基础用法

动态加载更多

API

VirtualList

参数说明类型默认值
data列表数据any[][]
uniqueKey数据项的唯一标识字段string-
pageMode是否开启整页滚动模式booleanfalse
visibleHeight可视区域高度number-
pageModeVisibleSize整页滚动模式下显示的数据条数number-
itemEstimatedHeight列表项预估高度number50
renderItem渲染列表项的函数(item: any, index: number, list: any[]) => React.ReactNode-
wrapperClass容器类名string-
wrapperStyle容器样式React.CSSProperties-
bufferSize缓冲区域大小number-
onLoadMore加载更多数据的回调函数() => Promise<unknown>-
hasMore是否还有更多数据booleanfalse
renderLoadMore自定义渲染加载更多区域(loading: boolean, hasMore: boolean) => React.ReactNode-
isShowLoadMore是否显示加载更多区域booleantrue
itemWrapperClass列表项容器类名string-
topThreshold顶部阈值number0
onScrollTop滚动到顶部的回调函数() => void-
onScroll滚动事件回调函数(evt: Event) => void-
presetOffset预设的滚动偏移量number-

注意事项

  1. 性能优化

    • 组件内部实现了高效的虚拟滚动机制,只渲染可视区域内的元素
    • 建议为每个列表项提供唯一的 uniqueKey,以提高渲染性能
    • 如果列表项高度不固定,可以通过 itemEstimatedHeight 提供一个预估值
  2. 滚动加载

    • 通过 onLoadMorehasMore 配合实现无限滚动加载
    • 可以使用 renderLoadMore 自定义加载状态的展示
    • 加载过程中会自动防止重复触发加载
  3. 页面模式

    • 开启 pageMode 后,列表会以整页为单位进行渲染和加载
    • 可以通过 pageModeVisibleSize 控制每页显示的数据条数
    • 页面模式下滚动事件会绑定到 document 上
  4. 滚动控制

    • 支持通过 presetOffset 设置初始滚动位置
    • 可以通过 onScrollTop 监听列表滚动到顶部的事件
    • topThreshold 用于控制触发滚动到顶部事件的阈值