react-window使用
海量列表数据如果一次性全部渲染出DOM,必将降低WEB性能,为此可以使用虚拟列表进行优化,原理就是程序中维护的还是完整列表,但实际上永远只是渲染一部分,随着滚动,程序动态切换渲染部分。因此足够的快且增加一部分的内容进行预渲染,实际上用户是无感知的。react生态下,可以选择使用
react-window
。这里描述下使用方法。
使用
直接上代码
1 | <FixedSizeList height={430} |
1 | const Row = (logs: TxLog[]) => memo(({ index, style }: { index: number; style: CSSProperties }) => { |
以上即基本的使用例子,完整参数支持等查看官方文档或者repo d.ts定义文件。
注意
- 比如纵向滚动,每行的高就一定要确定。
- 对于每行,
参数style需要传到行组件中
,否则滚动出错/闪烁,原因是style中使用了绝对定位来确定每个行元素在整个滚动窗体中的位置。
延伸
- 如antd-react组件库表格组件中对于虚拟列表支持,使用的就是react-window。
写在最后
对于大数据的显示,无限滚动算是其中一种方案,实际上也可以在功能设计上调整来避免,比如分页,so,技术只是服务于产品设计,灵活选择方案吧。