Check how many data attributes and classes you're attaching to each list item. Often the lag doesn't come from the number of DOM nodes themselves, but from the browser constantly recalculating styles and layout because of class changes during scrolling. If you're dynamically adding classes for active items or hover states, that can become a bottleneck. Try moving this to CSS using `nth-child` or a separate layer with `position: fixed` so the browser doesn't touch your main list.
Second thing - make sure you're not creating new objects in props on every render. For example, if you're passing `style={{ color: item.color }}` instead of a precomputed value, React will see different objects and recompute the component. Even with memoization this can slow things down. Better to prepare styles ahead of time or use CSS variables.
And one more thing: if you've got thousands of items in the list, even virtualization can be slow if you're creating too many DOM nodes in the viewport at once. Try reducing how many rows you render at a time - show only the visible part plus a small buffer above and below. Most virtualization libraries let you configure this with a parameter like `overscanRowCount`.