Relax List
rowHeight
constraint
#830
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I think it would be possible to support optional
rowHeight
for list items (usingResizeObserver
to lazily measure items) though there are a few challenges I have yet to work out:scrollToRow
work?rowProps
invalidation work?How should
scrollToRow
work?The most obvious approach to this would be to set an offset based on estimated sizes, but that can lead to bad UX (scroll jumping) when scrolling backwards (the more off the estimated sizes turn out to be, the bigger the scroll-jumps).
You can see examples of this here:
demo720.mov
An unsatisfying solution for this would be to not support that imperative API method for this props configuration.
How should
rowProps
invalidation work?Version 1 of this library required external code to manually invalidate row data (by calling an imperative
resetAfterIndex
method). Version 2 of this library auto-invalidates whenever a value inrowProps
change. This makes for a problem with lazily-measured content: What should happen ifrowProps
changes after the user has scrolled? (Cached sizes and offsets might not be valid anymore, and we can't quickly re-populate the cached bounds.)An unsatisfying solution for this would be to require explicit invalidation for this props configuration.