diff --git a/src/core/ReactCompositeComponent.js b/src/core/ReactCompositeComponent.js index 5c1e065665..42872293d0 100644 --- a/src/core/ReactCompositeComponent.js +++ b/src/core/ReactCompositeComponent.js @@ -555,6 +555,16 @@ function mixStaticSpecIntoComponent(Constructor, statics) { continue; } + var isReserved = name in RESERVED_SPEC_KEYS; + invariant( + !isReserved, + 'ReactCompositeComponent: You are attempting to define a reserved ' + + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + + 'as an instance property instead; it will still be accessible on the ' + + 'constructor.', + name + ); + var isInherited = name in Constructor; invariant( !isInherited, diff --git a/src/core/__tests__/ReactCompositeComponent-test.js b/src/core/__tests__/ReactCompositeComponent-test.js index 2deb31e912..20c7accb69 100644 --- a/src/core/__tests__/ReactCompositeComponent-test.js +++ b/src/core/__tests__/ReactCompositeComponent-test.js @@ -1272,6 +1272,29 @@ describe('ReactCompositeComponent', function() { expect(Component.pqr()).toBe(Component.type); }); + it('should throw if a reserved property is in statics', function() { + expect(function() { + React.createClass({ + statics: { + getDefaultProps: function() { + return { + foo: 0 + }; + } + }, + + render: function() { + return ; + } + }); + }).toThrow( + 'Invariant Violation: ReactCompositeComponent: You are attempting to ' + + 'define a reserved property, `getDefaultProps`, that shouldn\'t be on ' + + 'the "statics" key. Define it as an instance property instead; it ' + + 'will still be accessible on the constructor.' + ); + }); + it('should support statics in mixins', function() { var Mixin = { statics: {