[General] Don't use context from useHandler#4143
Open
j-piasecki wants to merge 2 commits intomainfrom
Open
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR replaces the per-handler useHandler context usage in the RNGH3 hook callback path with a shared mutable cache keyed by handlerTag, aiming to reduce Reanimated overhead for gesture updates.
Changes:
- Added a module-level mutable map in
useReanimatedEventHandlerto storelastUpdateEventstate by handler tag. - Relaxed
eventHandlerupdate-path context handling so it no longer throws when context is absent. - Extended the local Reanimated wrapper typings with
makeMutable.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
packages/react-native-gesture-handler/src/v3/hooks/callbacks/useReanimatedEventHandler.ts |
Replaces per-hook Reanimated context usage with a shared mutable handler-tag map in the UI runtime. |
packages/react-native-gesture-handler/src/v3/hooks/callbacks/eventHandler.ts |
Makes update/finalize logic tolerate missing context instead of throwing. |
packages/react-native-gesture-handler/src/handlers/gestures/reanimatedWrapper.ts |
Adds makeMutable to the local Reanimated type surface. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+27
to
+29
| const lastUpdateEventMap = Reanimated?.makeMutable( | ||
| new Map<number, ReanimatedContext<unknown>>() | ||
| ); |
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.
Description
Instead of using context from
useHandlerto store data about the last received event, this PR introduces a global mutable object that holds a map in the UI runtime, allowing data to be stored by handler tags. This, along with the changes introduced in software-mansion/react-native-reanimated#9334, should significantly reduce the overhead of using gestures with Reanimated.Test plan
Tested on
Touchable stress testbut added aPangesture. With this and the Reanimated change, the average dropped from 933ms to 810ms.