Skip to content

Commit

Permalink
Replace queueMicrotask with requestAnimationFrame (#2969)
Browse files Browse the repository at this point in the history
## Description

This PR replaces `queueMicrotask` with `requestAnimationFrame`. Turns out that introducing `useLayoutEffect` (which was introduced in #2925) ended up in gestures being attached in wrong order in some cases. 

This can be observed in #2963 (it is highly recommended to look into repro structure):

1. 3 handlers from `ZoomView` where attached - they have correct `tags`
2. Re-render happens, handlers' `tags` are now `-1`
3. `Pan` from `SVGMask` is attached - all handlers marked as `simultaneous` have `tag` `-1`, therefore relations are not set up
4. Handlers from 1. are attached again, so they get back their original `tags`

In this scenario, `simultaneous handlers` array in `Pan` in `SVGMask` was empty, effectively disabling this relation. Switching to `requestAnimationFrame` solves this problem. 

## Test plan

Verify that examples work as they used to (`draggable`, `multitap`, `transformations`)

Also tested on code from #2963 .
  • Loading branch information
m-bert authored Jun 28, 2024
1 parent e95f853 commit 31a62e9
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/ghQueueMicrotask.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// `queueMicrotask` was introduced to react-native in version 0.66 (https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#v0660)
// Because Gesture Handler supports versions 0.64+, we have to handle situations where someone uses older version of react native.
// That's why if `queueMicrotask` doesn't exist, we use `setImmediate` instead, since it was used before we switched to `queueMicrotask` in version 2.11.0
// We check for typeof requestAnimationFrame because of SSR
export const ghQueueMicrotask =
typeof queueMicrotask === 'function' ? queueMicrotask : setImmediate;
typeof requestAnimationFrame === 'function'
? requestAnimationFrame
: queueMicrotask;

0 comments on commit 31a62e9

Please sign in to comment.