import React from 'react'; import { useCallback, useRef, FunctionComponent } from 'react'; import { useVirtual } from '@ishikawa_masashi/react-virtual'; import { useEffect } from 'react'; import './VerticalList.css'; type Props = { height: number; width: number; size: number; onRender: (index: number) => JSX.Element; offset: number; lineHeight: number; overscan?: number; paddingEnd?: number; }; export const VerticalList: FunctionComponent = (props) => { const { height, width, size, onRender, offset, lineHeight, overscan = 5, paddingEnd = 0, } = props; const parentRef = useRef(null); const rowVirtualizer = useVirtual({ size, parentRef, estimateSize: useCallback(() => lineHeight, [lineHeight]), overscan, paddingEnd, }); useEffect(() => { rowVirtualizer.scrollToOffset(offset); }, [offset, rowVirtualizer]); // console.log(`size:${size}`); // console.log(`totalSize:${rowVirtualizer.totalSize}`); // console.log(`offset:${offset}`); return (
{rowVirtualizer.virtualItems.map((virtualRow) => (
{onRender(virtualRow.index)}
))}
); };