Fix infinite render loop by guaranteeing layout commit. #2038
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 #2013
Ensures layout convergence when modifyChildrenLayout repeatedly invalidates layout without reaching a commit.
In rare timing-dependent scenarios (e.g. variable item measurements, anchoring, concurrent layout effects), layout could continuously change by small amounts, causing repeated setRenderId calls inside a layout effect and preventing commitLayout from ever executing. This resulted in unnecessary re-renders and the “Exceeded max renders without commit” warning.
This change bounds layout retries and forces a commit after a small number of attempts, guaranteeing forward progress while leaving stable layout behavior unchanged.
Affected package(s):
@shopify/flash-list
Screenshots or videos
Not applicable (internal layout/rendering fix).