跳到主内容

4 款高性能的 react 的虚拟列表组件

· 4分钟阅读

最近遇到一个需求需要渲染大量的数据,如果常规渲染 1 万条数据,由于 DOM 数量渲染过多,浏览器会导致卡顿,那么如何解决呢?聪明的你可能会想到只渲染可视区域的数据。但是具体逻辑可能自己实现不出来,不妨试试以下 4 个 react 虚拟列表组件。😈

@egjs/react-infinitegrid

@egjs/react-infinitegrid 这款组件能够支持网格图片的无限滚动加载,本身也实现了虚拟滚动功能,无限图片加载。支持以下几种布局,分别是 MasonryInfiniteGridJustifiedInfiniteGridFrameInfiniteGridPackingInfiniteGrid。都是网格布局图片的无限滚动加载。不止 react 版本,也提供了 angularjs,vuejs,具体可以点击体验下效果

react-infinitegrid

ReactList

ReactList 是一款纯列表类展示组件,支持无限滚动加载,也支持一次性加载所有数据,也支持横向和纵向滚动加载,性能也是相当不错。不过目前组件还有一些小问题。

当指定 uniform 类型而不实际提供统一大小的元素时,会发生这种情况。该组件尝试一次仅绘制最少的必要元素,并且该最小元素计算基于列表中的第一个元素。当第一个元素与其他元素不匹配时,计算就会出错,组件将永远无法完全解决理想的必要元素。

该组件也不支持配置边距,计算元素位置和大小的计算会因边距变得更加复杂。不过可以使用透明边框或填充或具有嵌套元素的元素来实现。

ReactList

react-window

react-window 适用于高性能的大数据列表和大数据表格渲染。不过相对于 ReactList 只能渲染一次性数据,如果需要实现滚动无限加载,可以配合 react-window-infinite-loader 组件,具体可以查看例子

react-window 支持设置滚动到具体行,这对于 h5 大数据量列表的前进后退岂不是福音,因为在 h5 列表跳转到详情页面后,需要返回到列表页,就可以在跳转前存储当前的行数后跳到详情页,返回列表后就可以滚动到该行。按道理借助这个组件是可以实现的。😄

react-window

react-window 的官方 demo 地址

react vtree

react-vtree 为渲染大型树结构提供了一个轻量级和灵活的解决方案。如果你刚好想要实现大量树形结构树的渲染,那这个组件应该很适合你。它基于 react-window 库来实现的。具体效果可以点击demo 地址查看。由于用的是浏览器默认样式,样式完全可以自定义,基于 vtree 做二次封装,会有很好的效果。

react-vtree