Remove disableNewFiberFeatures flag (#10585)
Dan Abramov committed
Aug 31, 2017 at 18:23 UTC
de05d2ededfee911c500a42d02b4661854051b3c
27 files changed
+92
-378
src/isomorphic/children/__tests__/ReactChildren-test.js
-6
@@ -16,7 +16,6 @@ const ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
16
describe('ReactChildren', () => {
17
var React;
18
var ReactTestUtils;
19
- var ReactFeatureFlags;
19
20
function normalizeCodeLocInfo(str) {
21
return str && str.replace(/at .+?:\d+/g, 'at **');
@@ -883,11 +882,6 @@ describe('ReactChildren', () => {
882
883
if (ReactDOMFeatureFlags.useFiber) {
884
describe('with fragments enabled', () => {
886
- beforeEach(() => {
887
- ReactFeatureFlags = require('ReactFeatureFlags');
888
- ReactFeatureFlags.disableNewFiberFeatures = false;
889
- });
890
-
885
it('warns for keys for arrays of elements in a fragment', () => {
886
spyOn(console, 'error');
887
class ComponentReturningArray extends React.Component {
src/renderers/__tests__/ReactComponent-test.js
-4
@@ -496,10 +496,6 @@ describe('ReactComponent', () => {
496
497
if (ReactDOMFeatureFlags.useFiber) {
498
describe('with new features', () => {
499
- beforeEach(() => {
500
- require('ReactFeatureFlags').disableNewFiberFeatures = false;
501
- });
502
-
499
it('warns on function as a return value from a function', () => {
500
function Foo() {
501
return Foo;
src/renderers/__tests__/ReactEmptyComponent-test.js
+22
-27
@@ -13,10 +13,11 @@
13
14
var React;
15
var ReactDOM;
16
-var ReactDOMFeatureFlags;
16
var ReactTestUtils;
17
var TogglingComponent;
18
19
+var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
20
+
21
var log;
22
23
describe('ReactEmptyComponent', () => {
@@ -25,7 +26,6 @@ describe('ReactEmptyComponent', () => {
26
27
React = require('react');
28
ReactDOM = require('react-dom');
28
- ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
29
ReactTestUtils = require('react-dom/test-utils');
30
31
log = jasmine.createSpy();
@@ -71,18 +71,20 @@ describe('ReactEmptyComponent', () => {
71
expect(container2.children.length).toBe(0);
72
});
73
74
- it('should still throw when rendering to undefined', () => {
75
- class Component extends React.Component {
76
- render() {}
77
- }
74
+ if (ReactDOMFeatureFlags.useFiber) {
75
+ it('should still throw when rendering to undefined', () => {
76
+ class Component extends React.Component {
77
+ render() {}
78
+ }
79
79
- expect(function() {
80
- ReactTestUtils.renderIntoDocument(<Component />);
81
- }).toThrowError(
82
- 'Component.render(): A valid React element (or null) must be returned. You may ' +
83
- 'have returned undefined, an array or some other invalid object.',
84
- );
85
- });
80
+ expect(function() {
81
+ ReactTestUtils.renderIntoDocument(<Component />);
82
+ }).toThrowError(
83
+ 'Component(...): Nothing was returned from render. This usually means a return statement is missing. ' +
84
+ 'Or, to render nothing, return null.',
85
+ );
86
+ });
87
+ }
88
89
it('should be able to switch between rendering null and a normal tag', () => {
90
var instance1 = (
@@ -232,22 +234,15 @@ describe('ReactEmptyComponent', () => {
234
});
235
236
it('can render null at the top level', () => {
235
- var ReactFeatureFlags = require('ReactFeatureFlags');
236
- ReactFeatureFlags.disableNewFiberFeatures = false;
237
var div = document.createElement('div');
238
-
239
- try {
240
- if (ReactDOMFeatureFlags.useFiber) {
238
+ if (ReactDOMFeatureFlags.useFiber) {
239
+ ReactDOM.render(null, div);
240
+ expect(div.innerHTML).toBe('');
241
+ } else {
242
+ // Stack does not implement this.
243
+ expect(function() {
244
ReactDOM.render(null, div);
242
- expect(div.innerHTML).toBe('');
243
- } else {
244
- // Stack does not implement this.
245
- expect(function() {
246
- ReactDOM.render(null, div);
247
- }).toThrowError('ReactDOM.render(): Invalid component element.');
248
- }
249
- } finally {
250
- ReactFeatureFlags.disableNewFiberFeatures = true;
245
+ }).toThrowError('ReactDOM.render(): Invalid component element.');
246
}
247
});
248
src/renderers/__tests__/ReactStatelessComponent-test.js
+11
-9
@@ -157,15 +157,17 @@ describe('ReactStatelessComponent', () => {
157
});
158
}
159
160
- it('should throw when stateless component returns undefined', () => {
161
- function NotAComponent() {}
162
- expect(function() {
163
- ReactTestUtils.renderIntoDocument(<div><NotAComponent /></div>);
164
- }).toThrowError(
165
- 'NotAComponent(...): A valid React element (or null) must be returned. ' +
166
- 'You may have returned undefined, an array or some other invalid object.',
167
- );
168
- });
160
+ if (ReactDOMFeatureFlags.useFiber) {
161
+ it('should throw when stateless component returns undefined', () => {
162
+ function NotAComponent() {}
163
+ expect(function() {
164
+ ReactTestUtils.renderIntoDocument(<div><NotAComponent /></div>);
165
+ }).toThrowError(
166
+ 'NotAComponent(...): Nothing was returned from render. ' +
167
+ 'This usually means a return statement is missing. Or, to render nothing, return null.',
168
+ );
169
+ });
170
+ }
171
172
it('should throw on string refs in pure functions', () => {
173
function Child() {
src/renderers/__tests__/refs-test.js
-5
@@ -394,11 +394,6 @@ describe('string refs between fiber and stack', () => {
394
});
395
396
describe('root level refs', () => {
397
- beforeEach(() => {
398
- var ReactFeatureFlags = require('ReactFeatureFlags');
399
- ReactFeatureFlags.disableNewFiberFeatures = false;
400
- });
401
-
397
it('attaches and detaches root refs', () => {
398
var ReactDOM = require('react-dom');
399
var inst = null;
src/renderers/dom/ReactDOMNodeStreamRenderer.js
-18
@@ -11,11 +11,7 @@
11
12
'use strict';
13
14
-var invariant = require('fbjs/lib/invariant');
15
-var React = require('react');
14
var ReactPartialRenderer = require('ReactPartialRenderer');
17
-var ReactFeatureFlags = require('ReactFeatureFlags');
18
-
15
var Readable = require('stream').Readable;
16
17
// This is a Readable Node.js stream which wraps the ReactDOMPartialRenderer.
@@ -41,13 +37,6 @@ class ReactMarkupReadableStream extends Readable {
37
* See https://facebook.github.io/react/docs/react-dom-stream.html#rendertonodestream
38
*/
39
function renderToNodeStream(element) {
44
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
45
- if (disableNewFiberFeatures) {
46
- invariant(
47
- React.isValidElement(element),
48
- 'renderToNodeStream(): Invalid component element.',
49
- );
50
- }
40
return new ReactMarkupReadableStream(element, false);
41
}
42
@@ -57,13 +46,6 @@ function renderToNodeStream(element) {
46
* See https://facebook.github.io/react/docs/react-dom-stream.html#rendertostaticnodestream
47
*/
48
function renderToStaticNodeStream(element) {
60
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
61
- if (disableNewFiberFeatures) {
62
- invariant(
63
- React.isValidElement(element),
64
- 'renderToStaticNodeStream(): Invalid component element.',
65
- );
66
- }
49
return new ReactMarkupReadableStream(element, true);
50
}
51
src/renderers/dom/ReactDOMStringRenderer.js
-17
@@ -11,10 +11,7 @@
11
12
'use strict';
13
14
-var invariant = require('fbjs/lib/invariant');
15
-var React = require('react');
14
var ReactPartialRenderer = require('ReactPartialRenderer');
17
-var ReactFeatureFlags = require('ReactFeatureFlags');
15
16
/**
17
* Render a ReactElement to its initial HTML. This should only be used on the
@@ -22,13 +19,6 @@ var ReactFeatureFlags = require('ReactFeatureFlags');
19
* See https://facebook.github.io/react/docs/react-dom-server.html#rendertostring
20
*/
21
function renderToString(element) {
25
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
26
- if (disableNewFiberFeatures) {
27
- invariant(
28
- React.isValidElement(element),
29
- 'renderToString(): Invalid component element.',
30
- );
31
- }
22
var renderer = new ReactPartialRenderer(element, false);
23
var markup = renderer.read(Infinity);
24
return markup;
@@ -40,13 +30,6 @@ function renderToString(element) {
30
* See https://facebook.github.io/react/docs/react-dom-server.html#rendertostaticmarkup
31
*/
32
function renderToStaticMarkup(element) {
43
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
44
- if (disableNewFiberFeatures) {
45
- invariant(
46
- React.isValidElement(element),
47
- 'renderToStaticMarkup(): Invalid component element.',
48
- );
49
- }
33
var renderer = new ReactPartialRenderer(element, true);
34
var markup = renderer.read(Infinity);
35
return markup;
src/renderers/dom/__tests__/ReactDOMProduction-test.js
+3
-2
@@ -197,6 +197,7 @@ describe('ReactDOMProduction', () => {
197
});
198
199
it('should throw with an error code in production', () => {
200
+ const errorCode = ReactDOMFeatureFlags.useFiber ? 152 : 109;
201
expect(function() {
202
class Component extends React.Component {
203
render() {
@@ -207,8 +208,8 @@ describe('ReactDOMProduction', () => {
208
var container = document.createElement('div');
209
ReactDOM.render(<Component />, container);
210
}).toThrowError(
210
- 'Minified React error #109; visit ' +
211
- 'http://facebook.github.io/react/docs/error-decoder.html?invariant=109&args[]=Component' +
211
+ `Minified React error #${errorCode}; visit ` +
212
+ `http://facebook.github.io/react/docs/error-decoder.html?invariant=${errorCode}&args[]=Component` +
213
' for the full message or use the non-minified dev environment' +
214
' for full errors and additional helpful warnings.',
215
);
src/renderers/dom/fiber/ReactDOMFiberEntry.js
-34
@@ -21,7 +21,6 @@ var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
21
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
22
var ReactControlledComponent = require('ReactControlledComponent');
23
var ReactDOMComponentTree = require('ReactDOMComponentTree');
24
-var ReactFeatureFlags = require('ReactFeatureFlags');
24
var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
25
var ReactDOMFiberComponent = require('ReactDOMFiberComponent');
26
var ReactDOMFrameScheduling = require('ReactDOMFrameScheduling');
@@ -31,7 +30,6 @@ var ReactInputSelection = require('ReactInputSelection');
30
var ReactInstanceMap = require('ReactInstanceMap');
31
var ReactPortal = require('ReactPortal');
32
var ReactVersion = require('ReactVersion');
34
-var {isValidElement} = require('react');
33
var {injectInternals} = require('ReactFiberDevToolsHook');
34
var {
35
ELEMENT_NODE,
@@ -659,38 +657,6 @@ var ReactDOMFiber = {
657
container: DOMContainer,
658
callback: ?Function,
659
) {
662
- if (ReactFeatureFlags.disableNewFiberFeatures) {
663
- // Top-level check occurs here instead of inside child reconciler
664
- // because requirements vary between renderers. E.g. React Art
665
- // allows arrays.
666
- if (!isValidElement(element)) {
667
- if (typeof element === 'string') {
668
- invariant(
669
- false,
670
- 'ReactDOM.render(): Invalid component element. Instead of ' +
671
- "passing a string like 'div', pass " +
672
- "React.createElement('div') or <div />.",
673
- );
674
- } else if (typeof element === 'function') {
675
- invariant(
676
- false,
677
- 'ReactDOM.render(): Invalid component element. Instead of ' +
678
- 'passing a class like Foo, pass React.createElement(Foo) ' +
679
- 'or <Foo />.',
680
- );
681
- } else if (element != null && typeof element.props !== 'undefined') {
682
- // Check if it quacks like an element
683
- invariant(
684
- false,
685
- 'ReactDOM.render(): Invalid component element. This may be ' +
686
- 'caused by unintentionally loading two independent copies ' +
687
- 'of React.',
688
- );
689
- } else {
690
- invariant(false, 'ReactDOM.render(): Invalid component element.');
691
- }
692
- }
693
- }
660
return renderSubtreeIntoContainer(
661
null,
662
element,
src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
-73
@@ -23,17 +23,9 @@ describe('ReactDOMFiber', () => {
23
}
24
25
var container;
26
- var ReactFeatureFlags;
26
27
beforeEach(() => {
28
container = document.createElement('div');
30
- ReactFeatureFlags = require('ReactFeatureFlags');
31
- ReactFeatureFlags.disableNewFiberFeatures = false;
32
- });
33
-
34
- afterEach(() => {
35
- ReactFeatureFlags = require('ReactFeatureFlags');
36
- ReactFeatureFlags.disableNewFiberFeatures = true;
29
});
30
31
it('should render strings as children', () => {
@@ -1103,68 +1095,3 @@ describe('ReactDOMFiber', () => {
1095
});
1096
}
1097
});
1106
-
1107
-// disableNewFiberFeatures currently defaults to true in test
1108
-describe('disableNewFiberFeatures', () => {
1109
- var container;
1110
- var ReactFeatureFlags;
1111
-
1112
- beforeEach(() => {
1113
- container = document.createElement('div');
1114
- ReactFeatureFlags = require('ReactFeatureFlags');
1115
- ReactFeatureFlags.disableNewFiberFeatures = true;
1116
- });
1117
-
1118
- afterEach(() => {
1119
- ReactFeatureFlags = require('ReactFeatureFlags');
1120
- ReactFeatureFlags.disableNewFiberFeatures = false;
1121
- });
1122
-
1123
- it('throws if non-element passed to top-level render', () => {
1124
- const message = 'render(): Invalid component element.';
1125
- expect(() => ReactDOM.render(null, container)).toThrow(message, container);
1126
- expect(() => ReactDOM.render(undefined, container)).toThrow(
1127
- message,
1128
- container,
1129
- );
1130
- expect(() => ReactDOM.render(false, container)).toThrow(message, container);
1131
- expect(() => ReactDOM.render('Hi', container)).toThrow(message, container);
1132
- expect(() => ReactDOM.render(999, container)).toThrow(message, container);
1133
- expect(() => ReactDOM.render([<div key="a" />], container)).toThrow(
1134
- message,
1135
- container,
1136
- );
1137
- });
1138
-
1139
- it('throws if something other than false, null, or an element is returned from render', () => {
1140
- function Render(props) {
1141
- return props.children;
1142
- }
1143
-
1144
- expect(() => ReactDOM.render(<Render>Hi</Render>, container)).toThrow(
1145
- /You may have returned undefined/,
1146
- );
1147
- expect(() => ReactDOM.render(<Render>{999}</Render>, container)).toThrow(
1148
- /You may have returned undefined/,
1149
- );
1150
- expect(() =>
1151
- ReactDOM.render(<Render>[<div key="a" />]</Render>, container),
1152
- ).toThrow(/You may have returned undefined/);
1153
- });
1154
-
1155
- it('treats mocked render functions as if they return null', () => {
1156
- class Mocked extends React.Component {}
1157
- Mocked.prototype.render = jest.fn();
1158
- ReactDOM.render(<Mocked />, container);
1159
- expect(container.textContent).toEqual('');
1160
- });
1161
-
1162
- it('throws if the React package cannot be loaded', () => {
1163
- jest.resetModules();
1164
- jest.mock('react', () => undefined);
1165
- expect(() => require('react-dom')).toThrow(
1166
- 'ReactDOM was loaded before React.',
1167
- );
1168
- jest.resetModules();
1169
- });
1170
-});
src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js
-2
@@ -323,7 +323,6 @@ function resetModules() {
323
// TODO: can we express this test with only public API?
324
ExecutionEnvironment = require('ExecutionEnvironment');
325
326
- require('ReactFeatureFlags').disableNewFiberFeatures = false;
326
PropTypes = require('prop-types');
327
React = require('react');
328
ReactDOM = require('react-dom');
@@ -334,7 +333,6 @@ function resetModules() {
333
// Resetting is important because we want to avoid any shared state
334
// influencing the tests.
335
jest.resetModuleRegistry();
337
- require('ReactFeatureFlags').disableNewFiberFeatures = false;
336
ReactDOMServer = require('react-dom/server');
337
}
338
src/renderers/dom/shared/__tests__/ReactMount-test.js
+15
-23
@@ -68,29 +68,24 @@ describe('ReactMount', () => {
68
});
69
});
70
71
- it('throws when given a string', () => {
72
- expect(function() {
73
- ReactTestUtils.renderIntoDocument('div');
74
- }).toThrowError(
75
- 'ReactDOM.render(): Invalid component element. Instead of passing a ' +
76
- "string like 'div', pass React.createElement('div') or <div />.",
77
- );
78
- });
79
-
80
- it('throws when given a factory', () => {
81
- class Component extends React.Component {
82
- render() {
83
- return <div />;
71
+ if (ReactDOMFeatureFlags.useFiber) {
72
+ it('warns when given a factory', () => {
73
+ spyOn(console, 'error');
74
+ class Component extends React.Component {
75
+ render() {
76
+ return <div />;
77
+ }
78
}
85
- }
79
87
- expect(function() {
80
ReactTestUtils.renderIntoDocument(Component);
89
- }).toThrowError(
90
- 'ReactDOM.render(): Invalid component element. Instead of passing a ' +
91
- 'class like Foo, pass React.createElement(Foo) or <Foo />.',
92
- );
93
- });
81
+ expectDev(console.error.calls.count()).toBe(1);
82
+ expectDev(console.error.calls.argsFor(0)[0]).toContain(
83
+ 'Functions are not valid as a React child. ' +
84
+ 'This may happen if you return a Component instead of <Component /> from render. ' +
85
+ 'Or maybe you meant to call this function rather than return it.',
86
+ );
87
+ });
88
+ }
89
90
it('should render different components in same root', () => {
91
var container = document.createElement('container');
@@ -401,9 +396,6 @@ describe('ReactMount', () => {
396
let mountPoint;
397
398
beforeEach(() => {
404
- const ReactFeatureFlags = require('ReactFeatureFlags');
405
- ReactFeatureFlags.disableNewFiberFeatures = false;
406
-
399
containerDiv = document.createElement('div');
400
containerDiv.innerHTML = 'A<!-- react-mount-point-unstable -->B';
401
mountPoint = containerDiv.childNodes[1];
src/renderers/dom/shared/__tests__/ReactServerRendering-test.js
-4
@@ -19,7 +19,6 @@ var ReactMarkupChecksum;
19
var ReactReconcileTransaction;
20
var ReactTestUtils;
21
var PropTypes;
22
-var ReactFeatureFlags;
22
23
var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
24
@@ -36,9 +35,6 @@ describe('ReactDOMServer', () => {
35
ReactReconcileTransaction = require('ReactReconcileTransaction');
36
PropTypes = require('prop-types');
37
39
- ReactFeatureFlags = require('ReactFeatureFlags');
40
- ReactFeatureFlags.disableNewFiberFeatures = false;
41
-
38
ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
39
ExecutionEnvironment.canUseDOM = false;
40
ReactDOMServer = require('react-dom/server');
src/renderers/shared/fiber/ReactChildFiber.js
+41
-112
@@ -27,7 +27,6 @@ var ReactTypeOfWork = require('ReactTypeOfWork');
27
28
var emptyObject = require('fbjs/lib/emptyObject');
29
var invariant = require('fbjs/lib/invariant');
30
-var ReactFeatureFlags = require('ReactFeatureFlags');
30
31
if (__DEV__) {
32
var {getCurrentFiberStackAddendum} = require('ReactDebugCurrentFiber');
@@ -576,8 +575,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
575
}
576
577
if (__DEV__) {
579
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
580
- if (!disableNewFiberFeatures && typeof newChild === 'function') {
578
+ if (typeof newChild === 'function') {
579
warnOnFunctionType();
580
}
581
}
@@ -656,8 +654,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
654
}
655
656
if (__DEV__) {
659
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
660
- if (!disableNewFiberFeatures && typeof newChild === 'function') {
657
+ if (typeof newChild === 'function') {
658
warnOnFunctionType();
659
}
660
}
@@ -722,8 +719,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
719
}
720
721
if (__DEV__) {
725
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
726
- if (!disableNewFiberFeatures && typeof newChild === 'function') {
722
+ if (typeof newChild === 'function') {
723
warnOnFunctionType();
724
}
725
}
@@ -1301,118 +1297,51 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1297
// not as a fragment. Nested arrays on the other hand will be treated as
1298
// fragment nodes. Recursion happens at the normal flow.
1299
1304
- const disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
1305
-
1300
// Handle object types
1301
const isObject = typeof newChild === 'object' && newChild !== null;
1302
if (isObject) {
1303
// Support only the subset of return types that Stack supports. Treat
1304
// everything else as empty, but log a warning.
1311
- if (disableNewFiberFeatures) {
1312
- switch (newChild.$$typeof) {
1313
- case REACT_ELEMENT_TYPE:
1314
- return placeSingleChild(
1315
- reconcileSingleElement(
1316
- returnFiber,
1317
- currentFirstChild,
1318
- newChild,
1319
- priority,
1320
- ),
1321
- );
1322
-
1323
- case REACT_PORTAL_TYPE:
1324
- return placeSingleChild(
1325
- reconcileSinglePortal(
1326
- returnFiber,
1327
- currentFirstChild,
1328
- newChild,
1329
- priority,
1330
- ),
1331
- );
1332
- }
1333
- } else {
1334
- switch (newChild.$$typeof) {
1335
- case REACT_ELEMENT_TYPE:
1336
- return placeSingleChild(
1337
- reconcileSingleElement(
1338
- returnFiber,
1339
- currentFirstChild,
1340
- newChild,
1341
- priority,
1342
- ),
1343
- );
1344
-
1345
- case REACT_COROUTINE_TYPE:
1346
- return placeSingleChild(
1347
- reconcileSingleCoroutine(
1348
- returnFiber,
1349
- currentFirstChild,
1350
- newChild,
1351
- priority,
1352
- ),
1353
- );
1354
-
1355
- case REACT_YIELD_TYPE:
1356
- return placeSingleChild(
1357
- reconcileSingleYield(
1358
- returnFiber,
1359
- currentFirstChild,
1360
- newChild,
1361
- priority,
1362
- ),
1363
- );
1305
+ switch (newChild.$$typeof) {
1306
+ case REACT_ELEMENT_TYPE:
1307
+ return placeSingleChild(
1308
+ reconcileSingleElement(
1309
+ returnFiber,
1310
+ currentFirstChild,
1311
+ newChild,
1312
+ priority,
1313
+ ),
1314
+ );
1315
1365
- case REACT_PORTAL_TYPE:
1366
- return placeSingleChild(
1367
- reconcileSinglePortal(
1368
- returnFiber,
1369
- currentFirstChild,
1370
- newChild,
1371
- priority,
1372
- ),
1373
- );
1374
- }
1375
- }
1376
- }
1316
+ case REACT_COROUTINE_TYPE:
1317
+ return placeSingleChild(
1318
+ reconcileSingleCoroutine(
1319
+ returnFiber,
1320
+ currentFirstChild,
1321
+ newChild,
1322
+ priority,
1323
+ ),
1324
+ );
1325
1378
- if (disableNewFiberFeatures) {
1379
- // The new child is not an element. If it's not null or false,
1380
- // and the return fiber is a composite component, throw an error.
1381
- switch (returnFiber.tag) {
1382
- case ClassComponent: {
1383
- if (__DEV__) {
1384
- const instance = returnFiber.stateNode;
1385
- if (
1386
- instance.render._isMockFunction &&
1387
- typeof newChild === 'undefined'
1388
- ) {
1389
- // We allow auto-mocks to proceed as if they're
1390
- // returning null.
1391
- break;
1392
- }
1393
- }
1394
- const Component = returnFiber.type;
1395
- invariant(
1396
- newChild === null || newChild === false,
1397
- '%s.render(): A valid React element (or null) must be returned. ' +
1398
- 'You may have returned undefined, an array or some other ' +
1399
- 'invalid object.',
1400
- Component.displayName || Component.name || 'Component',
1326
+ case REACT_YIELD_TYPE:
1327
+ return placeSingleChild(
1328
+ reconcileSingleYield(
1329
+ returnFiber,
1330
+ currentFirstChild,
1331
+ newChild,
1332
+ priority,
1333
+ ),
1334
);
1402
- break;
1403
- }
1404
- case FunctionalComponent: {
1405
- // Composites accept elements, portals, null, or false
1406
- const Component = returnFiber.type;
1407
- invariant(
1408
- newChild === null || newChild === false,
1409
- '%s(...): A valid React element (or null) must be returned. ' +
1410
- 'You may have returned undefined, an array or some other ' +
1411
- 'invalid object.',
1412
- Component.displayName || Component.name || 'Component',
1335
+
1336
+ case REACT_PORTAL_TYPE:
1337
+ return placeSingleChild(
1338
+ reconcileSinglePortal(
1339
+ returnFiber,
1340
+ currentFirstChild,
1341
+ newChild,
1342
+ priority,
1343
+ ),
1344
);
1414
- break;
1415
- }
1345
}
1346
}
1347
@@ -1450,11 +1379,11 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1379
}
1380
1381
if (__DEV__) {
1453
- if (!disableNewFiberFeatures && typeof newChild === 'function') {
1382
+ if (typeof newChild === 'function') {
1383
warnOnFunctionType();
1384
}
1385
}
1457
- if (!disableNewFiberFeatures && typeof newChild === 'undefined') {
1386
+ if (typeof newChild === 'undefined') {
1387
// If the new child is undefined, and the return fiber is a composite
1388
// component, throw an error. If Fiber return types are disabled,
1389
// we already threw above.
src/renderers/shared/fiber/__tests__/ReactCoroutine-test.js
-3
@@ -14,7 +14,6 @@
14
var React;
15
var ReactNoop;
16
var ReactCoroutine;
17
-var ReactFeatureFlags;
17
18
describe('ReactCoroutine', () => {
19
beforeEach(() => {
@@ -23,8 +22,6 @@ describe('ReactCoroutine', () => {
22
ReactNoop = require('react-noop-renderer');
23
// TODO: can we express this test with only public API?
24
ReactCoroutine = require('ReactCoroutine');
26
- ReactFeatureFlags = require('ReactFeatureFlags');
27
- ReactFeatureFlags.disableNewFiberFeatures = false;
25
});
26
27
function div(...children) {
src/renderers/shared/fiber/__tests__/ReactIncremental-test.js
-4
@@ -13,7 +13,6 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
var PropTypes;
17
18
describe('ReactIncremental', () => {
@@ -22,9 +21,6 @@ describe('ReactIncremental', () => {
21
React = require('react');
22
ReactNoop = require('react-noop-renderer');
23
PropTypes = require('prop-types');
25
-
26
- ReactFeatureFlags = require('ReactFeatureFlags');
27
- ReactFeatureFlags.disableNewFiberFeatures = false;
24
});
25
26
it('should render a simple component', () => {
src/renderers/shared/fiber/__tests__/ReactIncrementalErrorHandling-test.js
-3
@@ -14,7 +14,6 @@
14
var PropTypes;
15
var React;
16
var ReactNoop;
17
-var ReactFeatureFlags;
17
18
describe('ReactIncrementalErrorHandling', () => {
19
beforeEach(() => {
@@ -22,8 +21,6 @@ describe('ReactIncrementalErrorHandling', () => {
21
PropTypes = require('prop-types');
22
React = require('react');
23
ReactNoop = require('react-noop-renderer');
25
- ReactFeatureFlags = require('ReactFeatureFlags');
26
- ReactFeatureFlags.disableNewFiberFeatures = false;
24
});
25
26
function div(...children) {
src/renderers/shared/fiber/__tests__/ReactIncrementalPerf-test.js
-3
@@ -14,7 +14,6 @@
14
describe('ReactDebugFiberPerf', () => {
15
let React;
16
let ReactCoroutine;
17
- let ReactFeatureFlags;
17
let ReactNoop;
18
let ReactPortal;
19
let PropTypes;
@@ -121,8 +120,6 @@ describe('ReactDebugFiberPerf', () => {
120
// TODO: can we express this test with only public API?
121
ReactCoroutine = require('ReactCoroutine');
122
ReactPortal = require('ReactPortal');
124
- ReactFeatureFlags = require('ReactFeatureFlags');
125
- ReactFeatureFlags.disableNewFiberFeatures = false;
123
PropTypes = require('prop-types');
124
});
125
src/renderers/shared/fiber/__tests__/ReactIncrementalReflection-test.js
-3
@@ -13,15 +13,12 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
describe('ReactIncrementalReflection', () => {
18
beforeEach(() => {
19
jest.resetModules();
20
React = require('react');
21
ReactNoop = require('react-noop-renderer');
23
- ReactFeatureFlags = require('ReactFeatureFlags');
24
- ReactFeatureFlags.disableNewFiberFeatures = false;
22
});
23
24
it('handles isMounted even when the initial render is deferred', () => {
src/renderers/shared/fiber/__tests__/ReactIncrementalScheduling-test.js
-3
@@ -13,15 +13,12 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
describe('ReactIncrementalScheduling', () => {
18
beforeEach(() => {
19
jest.resetModules();
20
React = require('react');
21
ReactNoop = require('react-noop-renderer');
23
- ReactFeatureFlags = require('ReactFeatureFlags');
24
- ReactFeatureFlags.disableNewFiberFeatures = false;
22
});
23
24
function span(prop) {
src/renderers/shared/fiber/__tests__/ReactIncrementalSideEffects-test.js
-3
@@ -13,15 +13,12 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
describe('ReactIncrementalSideEffects', () => {
18
beforeEach(() => {
19
jest.resetModules();
20
React = require('react');
21
ReactNoop = require('react-noop-renderer');
23
- ReactFeatureFlags = require('ReactFeatureFlags');
24
- ReactFeatureFlags.disableNewFiberFeatures = false;
22
});
23
24
function normalizeCodeLocInfo(str) {
src/renderers/shared/fiber/__tests__/ReactIncrementalTriangle-test.js
-4
@@ -13,16 +13,12 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
describe('ReactIncrementalTriangle', () => {
18
beforeEach(() => {
19
jest.resetModules();
20
React = require('react');
21
ReactNoop = require('ReactNoopEntry');
23
-
24
- ReactFeatureFlags = require('ReactFeatureFlags');
25
- ReactFeatureFlags.disableNewFiberFeatures = false;
22
});
23
24
function span(prop) {
src/renderers/shared/fiber/__tests__/ReactIncrementalUpdates-test.js
-3
@@ -13,15 +13,12 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
describe('ReactIncrementalUpdates', () => {
18
beforeEach(() => {
19
jest.resetModuleRegistry();
20
React = require('react');
21
ReactNoop = require('react-noop-renderer');
23
- ReactFeatureFlags = require('ReactFeatureFlags');
24
- ReactFeatureFlags.disableNewFiberFeatures = false;
22
});
23
24
function span(prop) {
src/renderers/shared/fiber/__tests__/ReactTopLevelFragment-test.js
-3
@@ -13,7 +13,6 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
// This is a new feature in Fiber so I put it in its own test file. It could
18
// probably move to one of the other test files once it is official.
@@ -22,8 +21,6 @@ describe('ReactTopLevelFragment', function() {
21
jest.resetModules();
22
React = require('react');
23
ReactNoop = require('react-noop-renderer');
25
- ReactFeatureFlags = require('ReactFeatureFlags');
26
- ReactFeatureFlags.disableNewFiberFeatures = false;
24
});
25
26
it('should render a simple fragment at the top of a component', function() {
src/renderers/shared/fiber/__tests__/ReactTopLevelText-test.js
-3
@@ -13,7 +13,6 @@
13
14
var React;
15
var ReactNoop;
16
-var ReactFeatureFlags;
16
17
// This is a new feature in Fiber so I put it in its own test file. It could
18
// probably move to one of the other test files once it is official.
@@ -22,8 +21,6 @@ describe('ReactTopLevelText', () => {
21
jest.resetModules();
22
React = require('react');
23
ReactNoop = require('react-noop-renderer');
25
- ReactFeatureFlags = require('ReactFeatureFlags');
26
- ReactFeatureFlags.disableNewFiberFeatures = false;
24
});
25
26
it('should render a component returning strings directly from render', () => {
src/renderers/shared/utils/ReactFeatureFlags.js
-1
@@ -13,7 +13,6 @@
13
'use strict';
14
15
var ReactFeatureFlags = {
16
- disableNewFiberFeatures: false,
16
enableAsyncSubtreeAPI: true,
17
};
18
src/renderers/testing/__tests__/ReactTestRenderer-test.js
-6
@@ -14,7 +14,6 @@
14
var React = require('react');
15
var ReactTestRenderer = require('react-test-renderer');
16
var prettyFormat = require('pretty-format');
17
-var ReactFeatureFlags;
17
18
// Kind of hacky, but we nullify all the instances to test the tree structure
19
// with jasmine's deep equality function, and test the instances separate. We
@@ -40,11 +39,6 @@ function cleanNode(node) {
39
}
40
41
describe('ReactTestRenderer', () => {
43
- beforeEach(() => {
44
- ReactFeatureFlags = require('ReactFeatureFlags');
45
- ReactFeatureFlags.disableNewFiberFeatures = false;
46
- });
47
-
42
function normalizeCodeLocInfo(str) {
43
return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
44
}