Better warning messages for deprecated methods
Ben Alpert committed
May 1, 2015 at 13:11 UTC
e06d3e0ab9d065917a956435d38cf4697ffa50de
2 files changed
+28
-9
src/modern/class/ReactComponent.js
+26
-8
@@ -98,20 +98,38 @@ ReactComponent.prototype.forceUpdate = function(callback) {
98
*/
99
if (__DEV__) {
100
var deprecatedAPIs = {
101
- getDOMNode: 'getDOMNode',
102
- isMounted: 'isMounted',
103
- replaceProps: 'replaceProps',
104
- replaceState: 'replaceState',
105
- setProps: 'setProps'
101
+ getDOMNode: [
102
+ 'getDOMNode',
103
+ 'Use React.findDOMNode(component) instead.'
104
+ ],
105
+ isMounted: [
106
+ 'isMounted',
107
+ 'Instead, make sure to clean up subscriptions and pending requests in ' +
108
+ 'componentWillUnmount to prevent memory leaks.'
109
+ ],
110
+ replaceProps: [
111
+ 'replaceProps',
112
+ 'Instead, call React.render again at the top level.'
113
+ ],
114
+ replaceState: [
115
+ 'replaceState',
116
+ 'Refactor your code to use setState instead (see ' +
117
+ 'https://github.com/facebook/react/issues/3236).'
118
+ ],
119
+ setProps: [
120
+ 'setProps',
121
+ 'Instead, call React.render again at the top level.'
122
+ ]
123
};
107
- var defineDeprecationWarning = function(methodName, displayName) {
124
+ var defineDeprecationWarning = function(methodName, info) {
125
try {
126
Object.defineProperty(ReactComponent.prototype, methodName, {
127
get: function() {
128
warning(
129
false,
113
- '%s(...) is deprecated in plain JavaScript React classes.',
114
- displayName
130
+ '%s(...) is deprecated in plain JavaScript React classes. %s',
131
+ info[0],
132
+ info[1]
133
);
134
return undefined;
135
}
src/modern/class/__tests__/ReactES6Class-test.js
+2
-1
@@ -373,7 +373,8 @@ describe('ReactES6Class', function() {
373
expect(() => instance.replaceProps({name: 'bar'})).toThrow();
374
expect(console.error.calls.length).toBe(5);
375
expect(console.error.calls[0].args[0]).toContain(
376
- 'getDOMNode(...) is deprecated in plain JavaScript React classes'
376
+ 'getDOMNode(...) is deprecated in plain JavaScript React classes. ' +
377
+ 'Use React.findDOMNode(component) instead.'
378
);
379
expect(console.error.calls[1].args[0]).toContain(
380
'replaceState(...) is deprecated in plain JavaScript React classes'