@samitouri / QOS-React-2 / commits / e06d3e0ab9

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'