当一个资源数据量很大时,一次加载数据会导致浏览器页面卡顿甚至崩溃,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 |