-
-
Notifications
You must be signed in to change notification settings - Fork 955
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix GestureDetector not working when its children change #2921
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not so happy about using findNodeHandle
- afaik it uses findDOMNode
under the hood, which is marked as deprecated and it is meant to be removed in future major version of React. We already started removing it on web in Reanimated
.
However, I think we can merge this now and later on we can think of how we can deal with this problem, if returning node
is not enough.
Also, shouldn't we replace all occurrences of findNodeHandle
? Right now we still have places where we use the one from gestureHandlerCommon
, is it necessary?
I agree about removing it, though it's fixing the problem and we're already using it anyway (in the delegate).
I think all references in the code related to the new API is updated. I'd rather not touch the old API as to not break anything accidentally, especially at the point where I don't know why the custom |
I think this one was not updated.
Well, I'm not sure why it was implemented this way, but I do agree that on web |
Fixed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Description
On web
findNodeHandle
was returning the ref it received as an argument, which in the case of GestureDetector was a reference to the Wrap component. This worked fine until the children of the wrap changed (but the wrap itself didn't, which caused the handlers not to be reattached), in which case the new view didn't have event listeners added and gestures didn't work.This PR changes the used method to always call
findNodeHandle
which returns the reference to the underlying DOM element, and view change detection works correctly in this case.Test plan
Tested on the example app and on the following code: