Samuel
#reactnative question: is this an acceptable way to use RNGH? I don't want the identity of `nativeGesture` to change, so as `drawerGesture` changes I just keep adding them endlessly in an effect seems cursed but fixes a gnarly perf problem!
function DrawerGestureRequireFail({children}: {children: React.ReactNode}) {
  const drawerGesture = useContext(DrawerGestureContext)

  const nativeGesture = useMemo(() => Gesture.Native(), [])

  // the drawer gesture identity changes whenever the drawer opens/closes,
  // but we don't want the GestureDetector to rerender when that happens
  // therefore we just keep adding the gestures every time it changes to the same
  // native gesture -sfn
  useEffect(() => {
    if (drawerGesture) {
      nativeGesture.requireExternalGestureToFail(drawerGesture)
    }

    // TODO: figure out how to clean this up
  }, [drawerGesture, nativeGesture])

  return <GestureDetector gesture={nativeGesture}>{children}</GestureDetector>
} 2 22
Samuel
I can't tell if it's a problem that it'll leave a pile dead gestures attached to it. like I guess they'll never be garbage collected
2 2
Samuel
hmmmm. the real question is: why is something that should be entirely UI thread getting janked up by the JS thread? looking at the drawer code, it looks like it calls `runOnJS` *prior* to triggering the animation. maybe we should start the anim first also, these are optional callbacks 🤔
react-navigation/packages/react-native-drawer-layout/src/views/Drawer.native.tsx at main · react-navigation/react-navigation
Routing and navigation for React Native and Web apps - react-navigation/react-navigation
github.com
1 2
Samuel
yeah lol this completely works on device. love a one-liner will open a pr with react navigation and finally end the scourge of every react native app having laggy drawers 😇
2 9
Samuel
3 lessons here 1. remember to profile your stuff 2. profiling isn’t everything, think deeply about what’s *actually* going on 3. if your fix is suspicious (telltale signs: useEffect, setTimeout, eslint-ignore) it probably is not the optimal solution, and you should keep digging
4 2 13
Samuel
update: I was completely wrong and a future version of React Navigation already has the fix
Samuel@samuel.fm· 2 Sept 2025
I was wrong. it was a third thing: the drawer would start animating, it would change the `open` prop, and then an effect would fire starting the animation again (hence jittering back to a previous position) luckily has already been fixed upstream 😁
3
Samuel
recently I’ve been using the React Profiler more seriously and I’m quickly finding it to be a very fun and extremely satisfying kind of puzzle in related news, the drawer menu jank might be fixed soon 🎉
2 1 48
Samuel
I still don’t have a good intuition about when parents/children changing will cause rerenders, especially with “donut” components
1 8
Samuel
the cause of the Drawer Jank was every time the drawer opens, it causes the RNGH gesture for the drawer to change, which causes a GestureDetector to rerender, which causes the entire Home Screen to rerender. perf pro tip: don’t make the entire screen rerender
14
Samuel
you can sign in using passkeys to app store connect now. thank you tim
3 54
Samuel
now that Taylor is getting married to the platonic ideal of “man” which celebrity are we gonna baselessly speculate is gay
6 1 41
Samuel
wait they’re actually cleaning the grimy disgusting glass ceiling at London Liverpool Street? London is so back
3 28
Samuel
I’ve been wishing they’d do that for like 15 years
1 3
Samuel
who up copying their generated compatibility header
4
Samuel
do people who work on advanced type systems have special keyboards or something or do they google for "weird rounded e unicode" every time
18 1 66
Older posts