diff --git a/src/classic/class/ReactClass.js b/src/classic/class/ReactClass.js index f02a919ef0..28595325b2 100644 --- a/src/classic/class/ReactClass.js +++ b/src/classic/class/ReactClass.js @@ -714,6 +714,9 @@ var typeDeprecationDescriptor = { displayName, displayName ); + Object.defineProperty(this, 'type', { + value: this + }); return this; } }; diff --git a/src/classic/class/__tests__/ReactClass-test.js b/src/classic/class/__tests__/ReactClass-test.js index 0fe36f9685..563171a0f4 100644 --- a/src/classic/class/__tests__/ReactClass-test.js +++ b/src/classic/class/__tests__/ReactClass-test.js @@ -50,12 +50,27 @@ describe('ReactClass-spec', function() { return
; } }); + var SecondTestComponent = React.createClass({ + render: function() { + return ; + } + }); expect(TestComponent.type).toBe(TestComponent); expect(console.warn.argsForCall.length).toBe(1); expect(console.warn.argsForCall[0][0]).toBe( 'Warning: TestComponent.type is deprecated. Use TestComponent ' + 'directly to access the class.' ); + // Warn once per class + expect(SecondTestComponent.type).toBe(SecondTestComponent); + expect(console.warn.argsForCall.length).toBe(2); + expect(console.warn.argsForCall[1][0]).toBe( + 'Warning: SecondTestComponent.type is deprecated. Use ' + + 'SecondTestComponent directly to access the class.' + ); + // Not again + expect(TestComponent.type).toBe(TestComponent); + expect(console.warn.argsForCall.length).toBe(2); }); it('should copy prop types onto the Constructor', function() {