← ClaudeAtlas

react-native-motion-gestureslisted

Build native-driven animation and gesture interactions in React Native/Expo with Reanimated 4 + Gesture Handler 3 — worklets, shared values, layout animations, shared-element transitions, and gesture composition (simultaneous/exclusive/race), plus the worklet/JS-thread interop pitfalls (stale closures, runOnJS boundaries) that cause silent bugs. The RN analogue of the web motion suite. Use when a task animates a RN screen, wires a pan/pinch/swipe/drag gesture, composes multiple gestures on one view, or a worklet reads a stale prop/state value. Triggers on "Reanimated", "shared value", "useAnimatedStyle", "worklet", "Gesture Handler", "runOnJS", "layout animation", "shared element transition", "RN swipe/drag/pinch".
BenMacDeezy/Orns-Forge · ★ 0 · Web & Frontend · score 72
Install: claude install-skill BenMacDeezy/Orns-Forge
<!-- last-verified: 2026-07 --> # React Native motion + gestures (Reanimated 4 + Gesture Handler 3) This is the RN analogue of the web motion suite: **worklets replace the compositor thread** as the thing that keeps animation smooth under a busy JS thread. `react-native-performance` (§2) already states the perf reason to go native-driven — this skill is the HOW: worklet mechanics, gesture composition, and the interop pitfalls that produce bugs which look like "it just doesn't update." ## 1. Worklets and shared values A **worklet** is a JS function that Reanimated can run on the **UI thread** instead of the JS thread — most Reanimated APIs (`useAnimatedStyle`, gesture callbacks, `withTiming`/`withSpring`) are auto-workletized; mark a function worklet explicitly with a `"worklet";` directive at its top when you pass a plain function somewhere Reanimated expects to run it on the UI thread. - **`useSharedValue`** creates a shared value — data that lives outside React's render cycle and is readable/writable from both threads via its `.value` property. Mutating `.value` does **not** trigger a React re-render; it drives native-thread animation directly. Never read/write `.value` during render — only inside worklets, effects, or event handlers. - **`useAnimatedStyle`** returns a style object recomputed on the UI thread whenever the shared values it reads change — this is the primary way a shared value becomes visible pixels. Only `transform` and `opacity` changes s