@z-cloud/virtual-react
Version:
一个基于React + TS开发的虚拟列表,支持瀑布流、grid的组件。
28 lines (27 loc) • 1.11 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const react = require("react");
const reactDom = require("react-dom");
const virtualBrowser = require("@z-cloud/virtual-browser");
const virtualVanilla = require("@z-cloud/virtual-vanilla");
const useIsomorphicLayoutEffect = virtualVanilla.canUseDom ? react.useLayoutEffect : react.useEffect;
function useVirualizer({ onReady, onChange, followPageScroll, ...props }, containerRef) {
const rerender = react.useReducer(() => ({}), {})[1];
const options = {
scrollMargin: followPageScroll ? virtualBrowser.getElementOffsetTop(containerRef.current) : 0,
...props,
onChange: (scrolling) => {
if (scrolling) {
reactDom.flushSync(rerender);
} else {
rerender();
}
onChange == null ? void 0 : onChange(scrolling);
}
};
const [virtualizer] = react.useState(() => new virtualBrowser.BrowserVirtualizer(options));
virtualizer.setOptions(options);
return virtualizer;
}
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
exports.useVirualizer = useVirualizer;