Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix bounds calculation with initialScrollIndex
Summary: Sometimes this._scrollMetrics.offset is 0 even after initial scroll is triggered, because the offset is updated only upon _onScroll, which may not have been called in time for the next computation of the render limits. Thus, there is a window of time where computeWindowedRenderLimits calculates undesired render limits as it uses the offset. This results in 2 extra rerenders of the VirtualizedList if an initial scroll offset is applied, as the render limits shifts from the expected bounds (calculated using initialScrollIndex), to the 0 offset bounds (calculated using computeWindowedRenderLimits due to offset = 0), back to the expected bounds (onScroll triggers recalculation of render limits via _updateCellsToRender). This issue was introduced in https://www.internalfb.com/diff/D35503114 (c5c1798) We cannot rely on this._hasDoneInitialScroll to indicate that scrolling *actually* finished (specifically, that _onScroll was called). Instead, we want to recalculate the windowed render limits if any of the following hold: - initialScrollIndex is undefined or is 0 - initialScrollIndex > 0 AND scrolling is complete - initialScrollIndex > 0 AND the end of the list is visible (this handles the case where the list is shorter than the visible area) <- this is the case that https://www.internalfb.com/diff/D35503114 (c5c1798) attempted to address Changelog: [Internal][Fixed] - Fix issue where VirtualizedList rerenders multiple times and flickers when initialScrollIndex is set Reviewed By: JoshuaGross Differential Revision: D36328891 fbshipit-source-id: aba26aa06b24f6976657dd1e9f95bb666f60d9a6
- Loading branch information