当一个资源数据量很大时,一次加载数据会导致浏览器页面卡顿甚至崩溃,VirtualList 支持根据鼠标滚动加载数据,同时销毁超出数据的 DOM
结构,保证页面的流畅性。
rowRenderer
对列表中每行元素进行渲染,可做到动态布局(每列不等高时重新计算并重新渲染);data
指要渲染资源数据,可结合 onQueryChange
做异步加载。真实场景中鼠标滚动,页面下滑过程中会加载新的数据。
row
不等高时需要计算调整,设置 isEstimate
为 true
。
rowHeight
函数动态改变返回高度并不会 rerender,需要主动触发 recomputeRowHeight
方法。
对于高度无法完全确定的 row(如内容高度不固定等),依然需要给出一个较准确的 rowHeight。同时设置 isEstimate={true}
,VirtualList会在render结束后对可视dom进行计算,并与对应的 rowHeight 比较。如果实际高度与 rowHeight 指定高度不同,则会用实际高度 rerender,直至完全一致。
由于 VirtualList 已将 dom 数量控制在可控范围之内,因此遍历计算再重新渲染的开销在可承受范围内,但对于可以确定高度的列表仍然要避免使用估计模式。
同时估计模式提供 debug 参数方便开发时确定 dom 的真实高度。同时设置 isEstimate={true}
和 debug={true}
,VirtualList 会打印真实高度与 rowHeight 不同的 row 对应的信息。
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
rowHeightRequired | union(func, number) | - | 行高 |
rowRendererRequired | func | - | 渲染 row UI |
height | union(string, number) | '100%' | 可见高度 |
data | array | [] | 数据 |
isEstimate | bool | - | 是否开启计算 |
onQueryChange | func | - | 监听 query 改变 |
query | object | - | 确定异步数据的 offset 和 limit |
totalCount | number | - | 总数 |
isFetching | bool | - | 是否在获取数据 |
runwayItems | number | 50 | 行高 |
runwayItemsOppsite | number | 20 | 行高 |
loader | union(func, node) | <p className="VirtualList__loader">数据加载中</p> | 数据加载中时展示 |
placeholder | union(func, node) | <p className="VirtualList__placeholder">暂无数据</p> | 默认展示文本 |
noMore | bool | - | 是否展示没有多余的数据 |
noMoreHint | union(func, node) | <p className="VirtualList__no-more-hint">没有更多信息</p> | 没有需要加载的数据时展示 |
debug | bool | true | Debug |