@z-cloud/virtual-taro
Version:
一个基于React + TS开发的虚拟列表,支持瀑布流、grid的组件。
32 lines (31 loc) • 789 B
JavaScript
import { useReducer, useState, useLayoutEffect } from "react";
import { flushSync } from "react-dom";
import { MiniVirtualizer } from "@z-cloud/virtual-mini";
const useIsomorphicLayoutEffect = useLayoutEffect;
function useVirualizer({
onReady,
onChange,
scrollMargin,
...props
}) {
const rerender = useReducer(() => ({}), {})[1];
const options = {
scrollMargin: scrollMargin ?? 0,
...props,
onChange: (scrolling) => {
if (scrolling) {
flushSync(rerender);
} else {
rerender();
}
onChange == null ? void 0 : onChange(scrolling);
}
};
const [virtualizer] = useState(() => new MiniVirtualizer(options));
virtualizer.setOptions(options);
return virtualizer;
}
export {
useIsomorphicLayoutEffect,
useVirualizer
};