diff --git a/src/renderers/shared/reconciler/ReactCompositeComponent.js b/src/renderers/shared/reconciler/ReactCompositeComponent.js
index 13657ad204a61..a8ccef5f501fd 100644
--- a/src/renderers/shared/reconciler/ReactCompositeComponent.js
+++ b/src/renderers/shared/reconciler/ReactCompositeComponent.js
@@ -194,6 +194,18 @@ var ReactCompositeComponentMixin = {
Component.displayName || Component.name || 'Component'
);
}
+
+ var propsMutated = inst.props !== publicProps;
+ var componentName =
+ Component.displayName || Component.name || 'Component';
+
+ warning(
+ typeof inst.props === 'undefined' ||
+ !propsMutated,
+ '%s(...): When calling super() in `%s`, make sure to pass ' +
+ 'up the same props that your component\'s constructor was passed.',
+ componentName, componentName
+ );
}
// These should be set up in the constructor, but as a convenience for
diff --git a/src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js b/src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
index 8935ab8231bbd..6d8bc37544979 100644
--- a/src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
+++ b/src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
@@ -1171,4 +1171,31 @@ describe('ReactCompositeComponent', function() {
});
+ it('should warn when mutated props are passed', function() {
+
+ var container = document.createElement('div');
+
+ class Foo extends React.Component {
+ constructor(props) {
+ var _props = { idx: props.idx + '!' };
+ super(_props);
+ }
+
+ render() {
+ return ;
+ }
+ }
+
+ expect(console.error.calls.length).toBe(0);
+
+ ReactDOM.render(, container);
+
+ expect(console.error.calls.length).toBe(1);
+ expect(console.error.argsForCall[0][0]).toContain(
+ 'Foo(...): When calling super() in `Foo`, make sure to pass ' +
+ 'up the same props that your component\'s constructor was passed.'
+ );
+
+ });
+
});