fix: React 19 strict mode drag and drop bug #8562
Merged
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.
Closes #8548
Due to facebook/react#29585, React sometimes triggers extra effect cleanups when elements are reordered. This can occur during virtualized scrolling. When keyboard dragging and scrolling the dragged element out of view, the drop target would unexpectedly shift to another target. The layout effect caused the drag to be aborted and the global state to reset, resulting in our
isInternal
checks failing.This stores the actual dragged element in a ref instead of just a boolean. Then in the effect cleanup we check if the element has actually unmounted from the DOM. This will ignore false positives caused by strict mode where React calls the cleanup function even when not actually unmounting.