Relax List rowHeight constraint
#830
Closed
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
rowHeightfor list items (usingResizeObserverto lazily measure items) though there are a few challenges I have yet to work out:scrollToRowwork?rowPropsinvalidation work?How should
scrollToRowwork?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
rowPropsinvalidation work?Version 1 of this library required external code to manually invalidate row data (by calling an imperative
resetAfterIndexmethod). Version 2 of this library auto-invalidates whenever a value inrowPropschange. This makes for a problem with lazily-measured content: What should happen ifrowPropschanges 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.