From 56937d646c741b32826a92a76193eadc8dc59031 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Fri, 30 Aug 2024 11:17:04 -0700 Subject: [PATCH] Animated: Generalize `ReactElement` Check in `AnimatedObject` (#46273) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46273 The implementation of `AnimatedObject` should recurse through its structure and consistently treat `ReactElement` objects as opaque. It wasn't consistent. This makes it consistent. Changelog: [General][Fixed] - Fixed undefined behavior in certain scenarios when `ReactElement` objects are supplied to Animated components Reviewed By: javache Differential Revision: D62012006 fbshipit-source-id: e6c3ac472945af8070735f1df856ff88b30a5624 --- .../Libraries/Animated/nodes/AnimatedObject.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/react-native/Libraries/Animated/nodes/AnimatedObject.js b/packages/react-native/Libraries/Animated/nodes/AnimatedObject.js index 0db05822131..8388dd79b56 100644 --- a/packages/react-native/Libraries/Animated/nodes/AnimatedObject.js +++ b/packages/react-native/Libraries/Animated/nodes/AnimatedObject.js @@ -23,7 +23,8 @@ function isPlainObject(value: any): boolean { return ( value !== null && typeof value === 'object' && - Object.getPrototypeOf(value).isPrototypeOf(Object) + Object.getPrototypeOf(value).isPrototypeOf(Object) && + !React.isValidElement(value) ); } @@ -81,10 +82,6 @@ export function hasAnimatedNode(value: any, depth: number = 0): boolean { } } } else if (isPlainObject(value)) { - // Don't consider React elements - if (React.isValidElement(value)) { - return false; - } for (const key in value) { if (hasAnimatedNode(value[key], depth + 1)) { return true;