Unify the method used to obtain the view tag, as there are currently several approaches.
Avoid passing a class component to the findNodeHandler. Instead, we'll pass a ref to the component, similar to what Expo implemented here: https://github.com/expo/expo/pull/33016.
Limit unnecessary invocations of findNodeHandler to no more than one call per render.
Remove the invocation of findHostInstance from Paper renderer on the New Architecture.
Additional Remarks:
When a class component is passed to createAnimatedComponent, it will still fall back to the slow path where we can get a native ref.
In NativeEventManager, we need to call findNodeHandler again after every render to ensure that the children of <GestureDetector /> haven't changed their native tags.
LayoutAnimationConfig still uses findNodeHandler. It requires a complete refactor of their functionality to eliminate its use, and I plan to handle this in another PR.
findHostInstance_DEPRECATED always follows the slow path even for native refs, which is why I've implemented our own version of findHostInstance to optimize the happy path.
Summary
This PR addresses the issue reported at https://github.com/software-mansion/react-native-reanimated/issues/6719 and aims to:
Additional Remarks:
createAnimatedComponent
, it will still fall back to the slow path where we can get a native ref.NativeEventManager
, we need to call findNodeHandler again after every render to ensure that the children of<GestureDetector />
haven't changed their native tags.LayoutAnimationConfig
still uses findNodeHandler. It requires a complete refactor of their functionality to eliminate its use, and I plan to handle this in another PR.findHostInstance_DEPRECATED
always follows the slow path even for native refs, which is why I've implemented our own version offindHostInstance
to optimize the happy path.Fixes https://github.com/software-mansion/react-native-reanimated/issues/6719
Related PRs:
Test plan