Samuel
pro tip for reducing doomscrolling: introduce a bug that causes your app to crash instantly on startup
8 5 174
Samuel
if they can fit "macbook pro levels of compute" in an iphone why don't they just fill a macbook pro with that compute density
9 10 187
Samuel
fixed the drawer menu jitter and improved perf when navigating around in this one too. feels good
3 43
Samuel
oh and brought back the language quick switcher in the composer
1 12
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
Older posts