Samuel
city of london is the best skyscraper district on earth because seemingly the only planning rule they have is “you can build whatever you want so long as it looks stupid and different to everything else”. it works so well!
6 14 132
Samuel
“hello we want to build a skyscraper” “is it stupid?” “uhhh there’s a public park on the roof and it has a giant lens that melts cars on the street” “approved!”
3 1 57
Samuel
Chinese cities a close second because clearly they have a directive to subsidise the LED lights industry
1 26
Samuel
“wow blueskyism is a totally contradictory ideology. what do they even want?”
2 13 86
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
Older posts