Repository navigation
Conversation
This branch has not been deployed
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.



Summary:
With
enableNativeEventTargetEventDispatchingon, a touch that ends after its view unmounted never reaches the responder, so the old responder sticks around andtrackedTouchCountstays one too high, which drops the next tap.processResponderEventalready handles a null target, butdispatchNativeEventonly accepts a non-null one and would crash indispatchTrustedEventif it got null. It now takesEventTarget | nulland returns right after the responder step when there is no target. The renderer'sdispatchEvent(ReactFabricEventEmitter.jsin react/react) still skips the call for a null target, so that guard has to go too before the bug is fully fixed, and this change needs to land first.Fixes #59519
Changelog:
[GENERAL] [FIXED] - Fix the responder not being released when a touch ends after its view unmounted
Test Plan:
Added a Fantom test to
ResponderEventTarget-itest.jsthat grants the responder, sendstopTouchEndwith a null target throughdispatchNativeEvent, and checks that the release fires and the next touch is granted again. I couldn't build the Fantom runner locally, so I also ran the null-target case as a throwaway Jest test: onmainit throwsTypeError: Cannot read properties of nullfromdispatchTrustedEvent, and it passes with this change.flow check, eslint and prettier are clean.