Reputation: 2359
The List component of react-virtualized offers a property scrollToIndex
to enable scrolling to a list item that is currently not visible.
The official tree example builds a hierarchical list with hierarchically stacked ul elements - just as expected.
So if index x is scrolled to, this row contains the entire hierarchy that resides under this specific tree element.
In my case there are very few level one elements. But in level 3 there are up to 600 elements. So it is important to be able to scroll an element of level 3 into view.
The scrollToIndex
can unfortunately not be used for this as all these 600 elements are contained in the same top level index.
The only way I can imagine this to work is by hierarchically creating entire react-virtualized List components instead of ul elements. Then in order to scroll an element into view scrollToIndex
would be called from top down on every hierarchical level.
Somehow I feel there must be an easier / more feasible way to do this.
Any ideas?
update: I had this idea:
scrolltop
in the List
componentOnly problem is: scrolltop is not applied :-(
This is the component I'm working on.
Upvotes: 3
Views: 2119
Reputation: 13487
Your intuition is correct here. You can't use the scrollToIndex
to scroll within a large row in the way you're describing. However you could use the scrollTop
property instead. (Internally Grid
is just converting the index to a scroll offset anyway.)
function render ({ scrollToIndex, ...rest }) {
// Convert scrollToIndex to scrollStop
const scrollTop =
rowOffset + // Position of row within List
innerOffset // Position of inner target within row
return (
<List
scrollTop={scrollTop}
{...rest}
/>
)
}
PS: This is a pretty cool tree component built on top of react-virtualized. Thought you may find it interesting: https://fritz-c.github.io/react-sortable-tree/
Upvotes: 1