虚拟列表 Hook,用于高效渲染大量数据列表。只渲染可见区域的项目,大幅提升性能。
import { useVirtualList } from '@resin-hooks/core';useVirtualList<T>(list: T[], options?: UseVirtualListOptions): UseVirtualListReturn<T>| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| list | T[] |
- | 要渲染的数据列表 |
| options | UseVirtualListOptions |
{} |
配置选项 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| containerHeight | number |
400 |
容器高度(像素) |
| itemHeight | number | ((index: number) => number) |
50 |
每个项目的高度(像素),支持动态高度 |
| overscan | number |
5 |
预渲染的项目数量(用于平滑滚动体验) |
返回一个对象,包含:
list (VirtualListItem<T>[]): 可见区域的项目列表
data: 项目数据index: 项目在原始列表中的索引offset: 项目在容器中的偏移位置(像素)containerProps (object): 容器样式对象,需要应用到滚动容器上
style: CSS 样式对象onScroll: 滚动事件处理函数ref: 容器引用回调函数totalHeight (number): 总高度(像素),用于设置占位元素的高度
scrollTo ((index: number) => void): 滚动到指定索引
scrollToOffset ((offset: number) => void): 滚动到指定偏移位置
固定高度 vs 动态高度:
项目高度:
容器样式:
containerProps 应用到滚动容器height: totalHeight 和 position: relative项目定位:
position: absolute 和 top: item.offset