@samitouri / QOS-React / commits / 646e786334

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 });