Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Animated.ScrollView with RefreshControl applying Animated transform t…
…wice Summary: There was a bug on Android when an Animated.ScrollView had a RefreshControl while an Animated style was applied, ie `transform`: ``` <Animated.ScrollView refreshControl={<RefreshControl />} style={{ transform: [{ translateY: new Animated.Value(200, {useNativeDriver: true}) }] }} /> ``` The transform value was being incorrectly applied twice. Since the styles were applied once on RefreshControl and once on NativeScrollView, the transform style is effectively applied twice: **1. ScrollView.js** - RefreshControl gets the transform through Fabric commit - [The RefreshControl gets wrapped around ScrollView](https://fburl.com/code/k60krxbj) while on iOS there is no change in the parent/child relationship. [Outer/inner styles are split and applied to RefreshControl/ScrollView](https://fburl.com/code/b2to75er), and transform styles are applied on the parent (RefreshControl) **2. createAnimatedComponent.js** - NativeScrollView gets the transform through Animated - [ScrollView forwards its ref to NativeScrollView](https://fburl.com/code/w1whtl5f), which means AnimatedComponent is setting the transform styles on NativeScrollView and not RefreshControl as ScrollView.js did This diff fixes this bug by using the `useAnimatedProps` hook which makes both RefreshControl and ScrollView components into animated components. Otherwise, the components don't know what to do with Animated values. --- Changelog: [Internal][Fixed] - Animated transform style properties were being applied twice when used on an Animated.ScrollView with RefreshControl on Android Reviewed By: javache Differential Revision: D38815633 fbshipit-source-id: 2b76639d2237176b6aae4fb1e22cf1a1ec70a69a
- Loading branch information