useVirtualizedList

虚拟列表 Hook

代码演示

相同尺寸列表项

itemSize 表示列表项的尺寸,当滚动方向为 vertical 时,表示高度;当滚动方向为 horizontal 时,表示宽度

  • horizontal 设置为 true 则变为水平布局模式,默认为 false
  • pinOffset 表示方向变化后是否保持 offset
  • scrollToOffset() 滚动到指定偏移方法
  • scrollToIndex() 滚动到指定项方法
    保持 offset:
    start
    Live Editor
    Copy

    非相同尺寸列表项

    itemSize 可以设置为一个返回尺寸的纯函数

      保持 offset:
      start
      Live Editor
      Copy

      监听触顶 / 触底事件

      设置 onTopReached 监听触顶,onTopReachedThreshold 设置触顶偏移;
      设置 onEndReached 监听触底,onEndReachedThreshold 设置触底偏移;

        Live Editor
        Copy

        API

        type UseVirtualList = <T = any>(list: T[], options: Options): Result<T>

        Options

        参数说明必选类型默认值
        containerRef滚动容器的 refReact.RefObject<HTMLElement>-
        horizontal设置为 true 则变为水平布局模式-falseboolean
        startOffset初始状态列表顶部距离容器顶部的距离,默认为 0,当列表元素上面存在其他元素时需要设置该参数-number0
        pinOffset是否在切换方向后保持偏移量-booleanfalse
        itemSize列表项尺寸:竖向滚动时,设置为高度;横向滚动时,设置为宽度number | ((index: number) => number)-
        overscanCount视区上、下额外渲染的 dom 节点数量-number10
        scrollRenderAheadCount视区上、下额外渲染的个数少于该参数设定的值时,重新计算整个渲染列表-number5
        onTopReached监听触顶-() => Promise<any>-
        onTopReachedThreshold调用 onTopReached 之前的临界值-number0
        onEndReached监听触底-() => Promise<any>-
        onEndReachedThreshold触底偏移量-number0
        onScroll监听滚动-(event: Event, scrollOffset: number) => void-

        Result

        参数说明类型
        list要渲染的列表片段{data: T; index: number; style: React.CSSProperties}[]
        isScrolling是否正在滚动boolean
        wrapperStyle容器的样式React.CSSProperties
        refreshing表示触顶方法执行中boolean
        reachEndPending表示触底方法执行中boolean
        scrollToOffset滚动到指定偏移方法(offset: number) => void
        scrollToIndex滚动到指定项方法(index: number, options?: { align?: 'start' | 'center' | 'end' | 'auto' }) => void
        getVisibleSlice获取当前可视区域渲染的元素切片() => number[]
        updateSize更新元素尺寸,用于动态计算元素场景(index: number, size: number) => void