diff --git a/Libraries/Animated/src/__tests__/AnimatedNative-test.js b/Libraries/Animated/src/__tests__/AnimatedNative-test.js index d3f59368ea6098..62c40c8388d79b 100644 --- a/Libraries/Animated/src/__tests__/AnimatedNative-test.js +++ b/Libraries/Animated/src/__tests__/AnimatedNative-test.js @@ -10,11 +10,14 @@ */ 'use strict'; +const ClassComponentMock = class {}; +ClassComponentMock.prototype.isReactComponent = true; + jest .clearAllMocks() - .setMock('Text', {}) - .setMock('View', {}) - .setMock('Image', {}) + .setMock('Text', ClassComponentMock) + .setMock('View', ClassComponentMock) + .setMock('Image', ClassComponentMock) .setMock('React', {Component: class {}}) .setMock('NativeModules', { NativeAnimatedModule: {}, diff --git a/Libraries/Animated/src/createAnimatedComponent.js b/Libraries/Animated/src/createAnimatedComponent.js index fd363ff0ca7495..42110be681988c 100644 --- a/Libraries/Animated/src/createAnimatedComponent.js +++ b/Libraries/Animated/src/createAnimatedComponent.js @@ -17,7 +17,16 @@ const AnimatedProps = require('./nodes/AnimatedProps'); const React = require('React'); const ViewStylePropTypes = require('ViewStylePropTypes'); +const invariant = require('fbjs/lib/invariant'); + function createAnimatedComponent(Component: any): any { + invariant( + typeof Component === 'string' || + (Component.prototype && Component.prototype.isReactComponent), + '`createAnimatedComponent` does not support stateless functional components; ' + + 'use a class component instead.', + ); + class AnimatedComponent extends React.Component { _component: any; _invokeAnimatedPropsCallbackOnMount: boolean = false;