From 140d9b4192d5399f032e26d17c3d78acf110f07d Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Thu, 5 Feb 2015 12:32:15 -0800 Subject: [PATCH] Warn only once for each class when accessing .type Currently it is a bit too spammy. --- src/classic/class/ReactClass.js | 3 +++ src/classic/class/__tests__/ReactClass-test.js | 15 +++++++++++++++ 2 files changed, 18 insertions(+) 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() {