From 5dbd9fc159470f55f7df3a8ac90b4cbb259ff231 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Mon, 9 Sep 2024 20:34:57 -0700 Subject: [PATCH] Animated: Reduce Duplication in `Animated{Props,Style}` (#46384) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46384 Minor refactor to reduce duplicated logic when traversing props and styles in `AnimatedProps` and `AnimatedStyle`, respectively. This refactor also makes a future optimization (in which we want to skip processing certain props) more straightforward to implement. Changelog [Internal] Reviewed By: javache Differential Revision: D62351078 fbshipit-source-id: 63c06462c99ef83f3b511456a3281b940b7a3ac0 --- .../Libraries/Animated/nodes/AnimatedProps.js | 27 +++++--------- .../Libraries/Animated/nodes/AnimatedStyle.js | 35 +++++++------------ 2 files changed, 21 insertions(+), 41 deletions(-) diff --git a/packages/react-native/Libraries/Animated/nodes/AnimatedProps.js b/packages/react-native/Libraries/Animated/nodes/AnimatedProps.js index 64e23273a6e..fc579fb41b5 100644 --- a/packages/react-native/Libraries/Animated/nodes/AnimatedProps.js +++ b/packages/react-native/Libraries/Animated/nodes/AnimatedProps.js @@ -30,29 +30,20 @@ function createAnimatedProps(inputProps: { const key = keys[ii]; const value = inputProps[key]; + let node; if (key === 'style') { - const node = AnimatedStyle.from(value); - if (node == null) { - props[key] = value; - } else { - nodeKeys.push(key); - nodes.push(node); - props[key] = node; - } + node = AnimatedStyle.from(value); } else if (value instanceof AnimatedNode) { - const node = value; + node = value; + } else { + node = AnimatedObject.from(value); + } + if (node == null) { + props[key] = value; + } else { nodeKeys.push(key); nodes.push(node); props[key] = node; - } else { - const node = AnimatedObject.from(value); - if (node == null) { - props[key] = value; - } else { - nodeKeys.push(key); - nodes.push(node); - props[key] = node; - } } } diff --git a/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js b/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js index 9faede47bed..13aedf47c31 100644 --- a/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js +++ b/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js @@ -32,36 +32,25 @@ function createAnimatedStyle( const key = keys[ii]; const value = inputStyle[key]; + let node; if (value != null && key === 'transform') { - const node = ReactNativeFeatureFlags.shouldUseAnimatedObjectForTransform() + node = ReactNativeFeatureFlags.shouldUseAnimatedObjectForTransform() ? AnimatedObject.from(value) : // $FlowFixMe[incompatible-call] - `value` is mixed. AnimatedTransform.from(value); - if (node == null) { - if (keepUnanimatedValues) { - style[key] = value; - } - } else { - nodeKeys.push(key); - nodes.push(node); - style[key] = node; - } } else if (value instanceof AnimatedNode) { - const node = value; + node = value; + } else { + node = AnimatedObject.from(value); + } + if (node == null) { + if (keepUnanimatedValues) { + style[key] = value; + } + } else { nodeKeys.push(key); nodes.push(node); - style[key] = value; - } else { - const node = AnimatedObject.from(value); - if (node == null) { - if (keepUnanimatedValues) { - style[key] = value; - } - } else { - nodeKeys.push(key); - nodes.push(node); - style[key] = node; - } + style[key] = node; } }