useInfiniteScroll
无限滚动
Usage
实时编辑器
function Demo() { const ref = useRef<HTMLDivElement>(null); const [data, setData] = useState([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); useInfiniteScroll( ref, () => { const length = data.length + 1; const newData = data.slice(); if (newData.length === 400) { return; } newData.push(...Array.from({ length: 5 }, (_, i) => length + i)); setData(newData); }, { distance: 10 }, ); return ( <div> <div ref={ref} style={{ width: 300, height: 300, overflow: "scroll" }}> {data.map(item => ( <div key={item} style={{ padding: 12, border: "1px solid" }}> item-{item} </div> ))} </div> </div> ); };
结果
Loading...
API
useInfiniteScroll
Returns
void
Arguments
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
target | dom元素 | BasicTarget<Element> (必填) | - |
onLoadMore | 加载更多函数 | UseInfiniteScrollLoadMore (必填) | - |
options | 可选参数 | UseInfiniteScrollOptions | undefined | - |
UseInfiniteScrollLoadMore
Returns
void | Promise<void>
Arguments
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
state | useScroll 返回的状态 | readonly [number, number, boolean, UseInfiniteScrollArrivedState, UseInfiniteScrollDirection] (必填) | - |
UseInfiniteScrollOptions
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
distance | 元素底部与视口底部之间的最小距离 | number | 0 |
direction | 滚动方向 | 'top' | 'bottom' | 'left' | 'right' | 'bottom' |
preserveScrollPosition | 加载更多项目时是否保留当前滚动位置 | boolean | - |
throttle | 滚动事件的节流时间,默认关闭。 | number | 0 |
idle | 滚动结束时的检查时间。当配置 throttle 时,此配置将设置为 (throttle +idle)。 | number | - |
offset | 将到达状态偏移 x 像素 | UseScrollOffset | - |
onScroll | 滚动的回调 | (e: Event) => void | - |
onStop | 滚动结束的回调 | (e: Event) => void | - |
eventListenerOptions | 滚动事件参数 | boolean | AddEventListenerOptions | {capture: false, passive: true} |
UseInfiniteScrollArrivedState
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
left | 到达左边 | boolean (必填) | - |
right | 到达右边 | boolean (必填) | - |
top | 到达顶部 | boolean (必填) | - |
bottom | 到达底部 | boolean (必填) | - |
UseInfiniteScrollDirection
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
left | 向左滚动 | boolean (必填) | - |
right | 向右滚动 | boolean (必填) | - |
top | 向上滚动 | boolean (必填) | - |
bottom | 向下滚动 | boolean (必填) | - |
BasicTarget
export type BasicTarget<T extends TargetType = Element> = (() => TargetValue<T>) | TargetValue<T> | MutableRefObject<TargetValue<T>>;
TargetValue
type TargetValue<T> = T | undefined | null;
TargetType
type TargetType = HTMLElement | Element | Window | Document | EventTarget;
UseScrollOffset
export interface UseScrollOffset {
left?: number;
right?: number;
top?: number;
bottom?: number;
}