Warn once when attempting to access React.createClass
Should still be undefined.
Andrew Clark committed
Mar 21, 2017 at 19:09 UTC
646e7863348a427e1ed9163a9a96fa759112f102
3 files changed
+46
-15
scripts/fiber/tests-passing.txt
+1
@@ -44,6 +44,7 @@ scripts/shared/__tests__/evalToString-test.js
44
45
src/isomorphic/__tests__/React-test.js
46
* should log a deprecation warning once when using React.createMixin
47
+* should warn once when attempting to access React.createClass
48
49
src/isomorphic/children/__tests__/ReactChildren-test.js
50
* should support identity for simple
src/isomorphic/React.js
+31
-15
@@ -19,7 +19,6 @@ var ReactPropTypes = require('ReactPropTypes');
19
var ReactVersion = require('ReactVersion');
20
21
var onlyChild = require('onlyChild');
22
-var warning = require('fbjs/lib/warning');
22
var checkPropTypes = require('checkPropTypes');
23
24
var createElement = ReactElement.createElement;
@@ -27,6 +26,8 @@ var createFactory = ReactElement.createFactory;
26
var cloneElement = ReactElement.cloneElement;
27
28
if (__DEV__) {
29
+ var warning = require('fbjs/lib/warning');
30
+ var canDefineProperty = require('canDefineProperty');
31
var ReactElementValidator = require('ReactElementValidator');
32
createElement = ReactElementValidator.createElement;
33
createFactory = ReactElementValidator.createFactory;
@@ -37,20 +38,6 @@ var createMixin = function(mixin) {
38
return mixin;
39
};
40
40
-if (__DEV__) {
41
- var warnedForCreateMixin = false;
42
-
43
- createMixin = function(mixin) {
44
- warning(
45
- warnedForCreateMixin,
46
- 'React.createMixin is deprecated and should not be used. You ' +
47
- 'can use this mixin directly instead.',
48
- );
49
- warnedForCreateMixin = true;
50
- return mixin;
51
- };
52
-}
53
-
41
var React = {
42
// Modern
43
@@ -94,6 +81,35 @@ if (__DEV__) {
81
ReactComponentTreeHook: require('ReactComponentTreeHook'),
82
ReactDebugCurrentFrame: require('ReactDebugCurrentFrame'),
83
});
84
+
85
+ let warnedForCreateMixin = false;
86
+ let warnedForCreateClass = false;
87
+
88
+ React.createMixin = function(mixin) {
89
+ warning(
90
+ warnedForCreateMixin,
91
+ 'React.createMixin is deprecated and should not be used. You ' +
92
+ 'can use this mixin directly instead.',
93
+ );
94
+ warnedForCreateMixin = true;
95
+ return mixin;
96
+ };
97
+
98
+ if (canDefineProperty) {
99
+ Object.defineProperty(React, 'createClass', {
100
+ get: function() {
101
+ warning(
102
+ warnedForCreateClass,
103
+ 'React.createClass is no longer supported. Use a plain JavaScript ' +
104
+ "class instead. If you're not yet ready to migrate, " +
105
+ 'react-create-class is available on npm as a temporary, ' +
106
+ 'drop-in replacement.',
107
+ );
108
+ warnedForCreateClass = true;
109
+ return undefined;
110
+ },
111
+ });
112
+ }
113
}
114
115
module.exports = React;
src/isomorphic/__tests__/React-test.js
+14
@@ -27,4 +27,18 @@ describe('React', () => {
27
'React.createMixin is deprecated and should not be used',
28
);
29
});
30
+
31
+ it('should warn once when attempting to access React.createClass', () => {
32
+ spyOn(console, 'error');
33
+ let createClass = React.createClass;
34
+ createClass = React.createClass;
35
+ expect(createClass).toBe(undefined);
36
+ expectDev(console.error.calls.count()).toBe(1);
37
+ expectDev(console.error.calls.argsFor(0)[0]).toContain(
38
+ 'React.createClass is no longer supported. Use a plain ' +
39
+ "JavaScript class instead. If you're not yet ready to migrate, " +
40
+ 'react-create-class is available on npm as a temporary, ' +
41
+ 'drop-in replacement.',
42
+ );
43
+ });
44
});