diff --git a/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js b/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js index 4f6187c..a9fc703 100644 --- a/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js +++ b/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js @@ -169,6 +169,9 @@ export const setUpTests = (userConfig = {}) => { return compareStyle(received, expectedStyle, config); }, }); + global.ReanimatedDataMock = { + now: () => currentTimestamp, + }; }; export const getAnimatedStyle = (received) => { return getCurrentStyle(received); diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx b/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx index 23a65fa..704cb69 100644 --- a/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx +++ b/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx @@ -195,6 +195,7 @@ export default function createAnimatedComponent( _isFirstRender = true; animatedStyle: { value: StyleProps } = { value: {} }; initialStyle = {}; + _lastSentStyle?: StyleProps; sv: SharedValue> | null; _propsAnimated?: PropsAnimated; _component: ComponentRef | null = null; @@ -579,16 +580,33 @@ export default function createAnimatedComponent( _filterNonAnimatedStyle(inputStyle: StyleProps) { const style: StyleProps = {}; + let changed = false; for (const key in inputStyle) { const value = inputStyle[key]; if (!hasAnimatedNodes(value)) { style[key] = value; + changed = changed || style[key] !== this._lastSentStyle?.[key]; } else if (value instanceof AnimatedValue) { // if any style in animated component is set directly to the `Value` we set those styles to the first value of `Value` node in order // to avoid flash of default styles when `Value` is being asynchrounously sent via bridge and initialized in the native side. style[key] = value._startingValue; + changed = changed || style[key] !== this._lastSentStyle?.[key]; } } + if (!changed) { + const inputKeys = new Set(Object.keys(inputStyle)); + let equalKeys = true; + for (const key in this._lastSentStyle) { + if (!inputKeys.has(key)) { + equalKeys = false; + break; + } + } + if (equalKeys) { + return this._lastSentStyle; + } + } + this._lastSentStyle = style; return style; }