Lazy Loading & Code Splitting

What strategy should be used for handling long lists or tables with lazy loading?
function VirtualList({ items, rowHeight, visibleRows }) {
  const [scrollTop, setScrollTop] = useState(0);
  const startIndex = Math.floor(scrollTop / rowHeight);
  const visibleItems = items.slice(startIndex, startIndex + visibleRows);

  return (
    <div onScroll={e => setScrollTop(e.target.scrollTop)}
         style={{ height: visibleRows * rowHeight }}>
      <div style={{ height: items.length * rowHeight,
                    paddingTop: startIndex * rowHeight }}>
        {visibleItems.map(item => (
          <div style={{ height: rowHeight }}>
            {item.content}
          </div>
        ))}
      </div>
    </div>
  );
}
Next Question (16/20)