Skip to content

Support synchronous onScroll events on the UI thread by using Reanimated #316

@mrousavy

Description

@mrousavy

Describe the feature

Currently the onPageScroll, onPageSelected and onPageScrollStateChanged events are dispatched as bubbling events using the batched bridge. This is really slow and doesn't allow for any smooth (60 FPS) interpolations based on scroll state, such as smooth title changes etc.

I'm suggesting to support synchronous callbacks by using the Reanimated APIs (worklets on the UI thread), which shouldn't be too hard to implement and allow for perfectly smooth 60 FPS animations all without crossing threads and spamming the bridge (see react-native-gesture-handler, they do the same thing with the onGesture event.)

Motivation

  • Way better Performance
  • No Bridge-spam
  • Allow reanimated worklet interpolations with 60 FPS

Implementation

I wanted to do the same thing for a gyroscope library but haven't come around to actually implement it. I believe reanimated already does a lot of work for you, but I don't exactly know how this is going to work. I'll have to take a look myself, but it looks like they also just have an RCTEventDispatcher set up, which then simply sends those events... 🤔 So I think there are no native code changes required here, but we somehow need a hook similar to the useAnimatedGestureHandler hook.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions