fix(layout): guard validateItemSize against stale onLayout indices#2293
Open
narumichi0710 wants to merge 1 commit into
Open
fix(layout): guard validateItemSize against stale onLayout indices#2293narumichi0710 wants to merge 1 commit into
narumichi0710 wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
Fixes #2291
ViewHolder.onLayoutcan fire after the list's layout table has changed during fast data updates or navigation.validateItemSizewas callinggetLayout(index), which throws when the render-time index is no longer valid in the layout manager.Switch to
tryGetLayout(index)and return early when it isundefined. Same pattern asStickyHeadersanduseRecyclerViewController.The same fix is running in production via Expensify's local patch (Expensify/App#91248).
Reviewers' hat-rack 🎩
RecyclerView.tsx: 1-line change, swap totryGetLayout+ early returnRecyclerViewManager.test.ts: helpers lifted to parent describe, two boundary tests addedTest plan
yarn test --forceExit— 187 tests pass, including 2 new boundary tests fortryGetLayoutyarn type-checkpassesyarn lintpassesyarn buildpasses