diff --git a/src/modern/class/ReactComponent.js b/src/modern/class/ReactComponent.js index bec7026b3d..3dd3b85f37 100644 --- a/src/modern/class/ReactComponent.js +++ b/src/modern/class/ReactComponent.js @@ -98,20 +98,38 @@ ReactComponent.prototype.forceUpdate = function(callback) { */ if (__DEV__) { var deprecatedAPIs = { - getDOMNode: 'getDOMNode', - isMounted: 'isMounted', - replaceProps: 'replaceProps', - replaceState: 'replaceState', - setProps: 'setProps' + getDOMNode: [ + 'getDOMNode', + 'Use React.findDOMNode(component) instead.' + ], + isMounted: [ + 'isMounted', + 'Instead, make sure to clean up subscriptions and pending requests in ' + + 'componentWillUnmount to prevent memory leaks.' + ], + replaceProps: [ + 'replaceProps', + 'Instead, call React.render again at the top level.' + ], + replaceState: [ + 'replaceState', + 'Refactor your code to use setState instead (see ' + + 'https://github.com/facebook/react/issues/3236).' + ], + setProps: [ + 'setProps', + 'Instead, call React.render again at the top level.' + ] }; - var defineDeprecationWarning = function(methodName, displayName) { + var defineDeprecationWarning = function(methodName, info) { try { Object.defineProperty(ReactComponent.prototype, methodName, { get: function() { warning( false, - '%s(...) is deprecated in plain JavaScript React classes.', - displayName + '%s(...) is deprecated in plain JavaScript React classes. %s', + info[0], + info[1] ); return undefined; } diff --git a/src/modern/class/__tests__/ReactES6Class-test.js b/src/modern/class/__tests__/ReactES6Class-test.js index 11c125342d..17b682063f 100644 --- a/src/modern/class/__tests__/ReactES6Class-test.js +++ b/src/modern/class/__tests__/ReactES6Class-test.js @@ -373,7 +373,8 @@ describe('ReactES6Class', function() { expect(() => instance.replaceProps({name: 'bar'})).toThrow(); expect(console.error.calls.length).toBe(5); expect(console.error.calls[0].args[0]).toContain( - 'getDOMNode(...) is deprecated in plain JavaScript React classes' + 'getDOMNode(...) is deprecated in plain JavaScript React classes. ' + + 'Use React.findDOMNode(component) instead.' ); expect(console.error.calls[1].args[0]).toContain( 'replaceState(...) is deprecated in plain JavaScript React classes'