Remove `import * as` pattern from the codebase (#14282)
Whenever we do this, Rollup needs to materialize this as an object. This causes it to also add the Babel compatibility property which is unnecessary bloat. However, since when we use these, we leak the object this often also deopts any compiler optimizations. If we really need an object we should export default an object. Currently there is an exception for DOMTopLevelEventTypes since listing out the imports is a PITA and it doesn't escape so it should get properly inlined. We should probably move to a different pattern to avoid this for consistency though.
Sebastian Markbåge committed
Nov 19, 2018 at 15:32 UTC
c954efa70f44a44be9c33c60c57f87bea6f40a10
34 files changed
+467
-390
packages/react-art/src/ReactART.js
+10
-6
@@ -7,7 +7,11 @@
7
8
import React from 'react';
9
import ReactVersion from 'shared/ReactVersion';
10
-import * as ARTRenderer from 'react-reconciler/inline.art';
10
+import {
11
+ createContainer,
12
+ updateContainer,
13
+ injectIntoDevTools,
14
+} from 'react-reconciler/inline.art';
15
import Transform from 'art/core/transform';
16
import Mode from 'art/modes/current';
17
import FastNoSideEffects from 'art/modes/fast-noSideEffects';
@@ -61,8 +65,8 @@ class Surface extends React.Component {
65
66
this._surface = Mode.Surface(+width, +height, this._tagRef);
67
64
- this._mountNode = ARTRenderer.createContainer(this._surface);
65
- ARTRenderer.updateContainer(this.props.children, this._mountNode, this);
68
+ this._mountNode = createContainer(this._surface);
69
+ updateContainer(this.props.children, this._mountNode, this);
70
}
71
72
componentDidUpdate(prevProps, prevState) {
@@ -72,7 +76,7 @@ class Surface extends React.Component {
76
this._surface.resize(+props.width, +props.height);
77
}
78
75
- ARTRenderer.updateContainer(this.props.children, this._mountNode, this);
79
+ updateContainer(this.props.children, this._mountNode, this);
80
81
if (this._surface.render) {
82
this._surface.render();
@@ -80,7 +84,7 @@ class Surface extends React.Component {
84
}
85
86
componentWillUnmount() {
83
- ARTRenderer.updateContainer(null, this._mountNode, this);
87
+ updateContainer(null, this._mountNode, this);
88
}
89
90
render() {
@@ -132,7 +136,7 @@ class Text extends React.Component {
136
}
137
}
138
135
-ARTRenderer.injectIntoDevTools({
139
+injectIntoDevTools({
140
findFiberByHostInstance: () => null,
141
bundleType: __DEV__ ? 1 : 0,
142
version: ReactVersion,
packages/react-dom/src/client/ReactDOM.js
+84
-60
@@ -19,15 +19,42 @@ import type {Container} from './ReactDOMHostConfig';
19
import '../shared/checkReact';
20
import './ReactDOMClientInjection';
21
22
-import * as DOMRenderer from 'react-reconciler/inline.dom';
23
-import * as ReactPortal from 'shared/ReactPortal';
22
+import {
23
+ computeUniqueAsyncExpiration,
24
+ findHostInstanceWithNoPortals,
25
+ updateContainerAtExpirationTime,
26
+ flushRoot,
27
+ createContainer,
28
+ updateContainer,
29
+ batchedUpdates,
30
+ unbatchedUpdates,
31
+ interactiveUpdates,
32
+ flushInteractiveUpdates,
33
+ flushSync,
34
+ flushControlled,
35
+ injectIntoDevTools,
36
+ getPublicRootInstance,
37
+ findHostInstance,
38
+ findHostInstanceWithWarning,
39
+} from 'react-reconciler/inline.dom';
40
+import {createPortal as createPortalImpl} from 'shared/ReactPortal';
41
import {canUseDOM} from 'shared/ExecutionEnvironment';
25
-import * as ReactGenericBatching from 'events/ReactGenericBatching';
26
-import * as ReactControlledComponent from 'events/ReactControlledComponent';
27
-import * as EventPluginHub from 'events/EventPluginHub';
28
-import * as EventPluginRegistry from 'events/EventPluginRegistry';
29
-import * as EventPropagators from 'events/EventPropagators';
30
-import * as ReactInstanceMap from 'shared/ReactInstanceMap';
42
+import {setBatchingImplementation} from 'events/ReactGenericBatching';
43
+import {
44
+ setRestoreImplementation,
45
+ enqueueStateRestore,
46
+ restoreStateIfNeeded,
47
+} from 'events/ReactControlledComponent';
48
+import {
49
+ injection as EventPluginHubInjection,
50
+ runEventsInBatch,
51
+} from 'events/EventPluginHub';
52
+import {eventNameDispatchConfigs} from 'events/EventPluginRegistry';
53
+import {
54
+ accumulateTwoPhaseDispatches,
55
+ accumulateDirectDispatches,
56
+} from 'events/EventPropagators';
57
+import {has as hasInstance} from 'shared/ReactInstanceMap';
58
import ReactVersion from 'shared/ReactVersion';
59
import ReactSharedInternals from 'shared/ReactSharedInternals';
60
import getComponentName from 'shared/getComponentName';
@@ -36,9 +63,14 @@ import lowPriorityWarning from 'shared/lowPriorityWarning';
63
import warningWithoutStack from 'shared/warningWithoutStack';
64
import {enableStableConcurrentModeAPIs} from 'shared/ReactFeatureFlags';
65
39
-import * as ReactDOMComponentTree from './ReactDOMComponentTree';
66
+import {
67
+ getInstanceFromNode,
68
+ getNodeFromInstance,
69
+ getFiberCurrentPropsFromNode,
70
+ getClosestInstanceFromNode,
71
+} from './ReactDOMComponentTree';
72
import {restoreControlledState} from './ReactDOMComponent';
41
-import * as ReactDOMEventListener from '../events/ReactDOMEventListener';
73
+import {dispatchEvent} from '../events/ReactDOMEventListener';
74
import {
75
ELEMENT_NODE,
76
COMMENT_NODE,
@@ -74,7 +106,7 @@ if (__DEV__) {
106
107
topLevelUpdateWarnings = (container: DOMContainer) => {
108
if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {
77
- const hostInstance = DOMRenderer.findHostInstanceWithNoPortals(
109
+ const hostInstance = findHostInstanceWithNoPortals(
110
container._reactRootContainer._internalRoot.current,
111
);
112
if (hostInstance) {
@@ -90,9 +122,7 @@ if (__DEV__) {
122
123
const isRootRenderedBySomeReact = !!container._reactRootContainer;
124
const rootEl = getReactRootElementInContainer(container);
93
- const hasNonRootReactChild = !!(
94
- rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl)
95
- );
125
+ const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
126
127
warningWithoutStack(
128
!hasNonRootReactChild || isRootRenderedBySomeReact,
@@ -125,7 +155,7 @@ if (__DEV__) {
155
};
156
}
157
128
-ReactControlledComponent.setRestoreImplementation(restoreControlledState);
158
+setRestoreImplementation(restoreControlledState);
159
160
export type DOMContainer =
161
| (Element & {
@@ -165,7 +195,7 @@ type Root = {
195
};
196
197
function ReactBatch(root: ReactRoot) {
168
- const expirationTime = DOMRenderer.computeUniqueAsyncExpiration();
198
+ const expirationTime = computeUniqueAsyncExpiration();
199
this._expirationTime = expirationTime;
200
this._root = root;
201
this._next = null;
@@ -185,7 +215,7 @@ ReactBatch.prototype.render = function(children: ReactNodeList) {
215
const internalRoot = this._root._internalRoot;
216
const expirationTime = this._expirationTime;
217
const work = new ReactWork();
188
- DOMRenderer.updateContainerAtExpirationTime(
218
+ updateContainerAtExpirationTime(
219
children,
220
internalRoot,
221
null,
@@ -256,7 +286,7 @@ ReactBatch.prototype.commit = function() {
286
287
// Synchronously flush all the work up to this batch's expiration time.
288
this._defer = false;
259
- DOMRenderer.flushRoot(internalRoot, expirationTime);
289
+ flushRoot(internalRoot, expirationTime);
290
291
// Pop the batch from the list.
292
const next = this._next;
@@ -336,7 +366,7 @@ function ReactRoot(
366
isConcurrent: boolean,
367
hydrate: boolean,
368
) {
339
- const root = DOMRenderer.createContainer(container, isConcurrent, hydrate);
369
+ const root = createContainer(container, isConcurrent, hydrate);
370
this._internalRoot = root;
371
}
372
ReactRoot.prototype.render = function(
@@ -352,7 +382,7 @@ ReactRoot.prototype.render = function(
382
if (callback !== null) {
383
work.then(callback);
384
}
355
- DOMRenderer.updateContainer(children, root, null, work._onCommit);
385
+ updateContainer(children, root, null, work._onCommit);
386
return work;
387
};
388
ReactRoot.prototype.unmount = function(callback: ?() => mixed): Work {
@@ -365,7 +395,7 @@ ReactRoot.prototype.unmount = function(callback: ?() => mixed): Work {
395
if (callback !== null) {
396
work.then(callback);
397
}
368
- DOMRenderer.updateContainer(null, root, null, work._onCommit);
398
+ updateContainer(null, root, null, work._onCommit);
399
return work;
400
};
401
ReactRoot.prototype.legacy_renderSubtreeIntoContainer = function(
@@ -382,7 +412,7 @@ ReactRoot.prototype.legacy_renderSubtreeIntoContainer = function(
412
if (callback !== null) {
413
work.then(callback);
414
}
385
- DOMRenderer.updateContainer(children, root, parentComponent, work._onCommit);
415
+ updateContainer(children, root, parentComponent, work._onCommit);
416
return work;
417
};
418
ReactRoot.prototype.createBatch = function(): Batch {
@@ -453,10 +483,10 @@ function shouldHydrateDueToLegacyHeuristic(container) {
483
);
484
}
485
456
-ReactGenericBatching.setBatchingImplementation(
457
- DOMRenderer.batchedUpdates,
458
- DOMRenderer.interactiveUpdates,
459
- DOMRenderer.flushInteractiveUpdates,
486
+setBatchingImplementation(
487
+ batchedUpdates,
488
+ interactiveUpdates,
489
+ flushInteractiveUpdates,
490
);
491
492
let warnedAboutHydrateAPI = false;
@@ -535,12 +565,12 @@ function legacyRenderSubtreeIntoContainer(
565
if (typeof callback === 'function') {
566
const originalCallback = callback;
567
callback = function() {
538
- const instance = DOMRenderer.getPublicRootInstance(root._internalRoot);
568
+ const instance = getPublicRootInstance(root._internalRoot);
569
originalCallback.call(instance);
570
};
571
}
572
// Initial mount should not be batched.
543
- DOMRenderer.unbatchedUpdates(() => {
573
+ unbatchedUpdates(() => {
574
if (parentComponent != null) {
575
root.legacy_renderSubtreeIntoContainer(
576
parentComponent,
@@ -555,7 +585,7 @@ function legacyRenderSubtreeIntoContainer(
585
if (typeof callback === 'function') {
586
const originalCallback = callback;
587
callback = function() {
558
- const instance = DOMRenderer.getPublicRootInstance(root._internalRoot);
588
+ const instance = getPublicRootInstance(root._internalRoot);
589
originalCallback.call(instance);
590
};
591
}
@@ -570,7 +600,7 @@ function legacyRenderSubtreeIntoContainer(
600
root.render(children, callback);
601
}
602
}
573
- return DOMRenderer.getPublicRootInstance(root._internalRoot);
603
+ return getPublicRootInstance(root._internalRoot);
604
}
605
606
function createPortal(
@@ -583,7 +613,7 @@ function createPortal(
613
'Target container is not a DOM element.',
614
);
615
// TODO: pass ReactDOM portal implementation as third argument
586
- return ReactPortal.createPortal(children, container, null, key);
616
+ return createPortalImpl(children, container, null, key);
617
}
618
619
const ReactDOM: Object = {
@@ -616,12 +646,9 @@ const ReactDOM: Object = {
646
return (componentOrElement: any);
647
}
648
if (__DEV__) {
619
- return DOMRenderer.findHostInstanceWithWarning(
620
- componentOrElement,
621
- 'findDOMNode',
622
- );
649
+ return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');
650
}
624
- return DOMRenderer.findHostInstance(componentOrElement);
651
+ return findHostInstance(componentOrElement);
652
},
653
654
hydrate(element: React$Node, container: DOMContainer, callback: ?Function) {
@@ -656,7 +683,7 @@ const ReactDOM: Object = {
683
callback: ?Function,
684
) {
685
invariant(
659
- parentComponent != null && ReactInstanceMap.has(parentComponent),
686
+ parentComponent != null && hasInstance(parentComponent),
687
'parentComponent must be a valid React Component',
688
);
689
return legacyRenderSubtreeIntoContainer(
@@ -677,8 +704,7 @@ const ReactDOM: Object = {
704
if (container._reactRootContainer) {
705
if (__DEV__) {
706
const rootEl = getReactRootElementInContainer(container);
680
- const renderedByDifferentReact =
681
- rootEl && !ReactDOMComponentTree.getInstanceFromNode(rootEl);
707
+ const renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);
708
warningWithoutStack(
709
!renderedByDifferentReact,
710
"unmountComponentAtNode(): The node you're attempting to unmount " +
@@ -687,7 +713,7 @@ const ReactDOM: Object = {
713
}
714
715
// Unmount should not be batched.
690
- DOMRenderer.unbatchedUpdates(() => {
716
+ unbatchedUpdates(() => {
717
legacyRenderSubtreeIntoContainer(null, null, container, false, () => {
718
container._reactRootContainer = null;
719
});
@@ -698,9 +724,7 @@ const ReactDOM: Object = {
724
} else {
725
if (__DEV__) {
726
const rootEl = getReactRootElementInContainer(container);
701
- const hasNonRootReactChild = !!(
702
- rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl)
703
- );
727
+ const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
728
729
// Check if the container itself is a React root node.
730
const isContainerReactRoot =
@@ -740,29 +764,29 @@ const ReactDOM: Object = {
764
return createPortal(...args);
765
},
766
743
- unstable_batchedUpdates: DOMRenderer.batchedUpdates,
767
+ unstable_batchedUpdates: batchedUpdates,
768
745
- unstable_interactiveUpdates: DOMRenderer.interactiveUpdates,
769
+ unstable_interactiveUpdates: interactiveUpdates,
770
747
- flushSync: DOMRenderer.flushSync,
771
+ flushSync: flushSync,
772
749
- unstable_flushControlled: DOMRenderer.flushControlled,
773
+ unstable_flushControlled: flushControlled,
774
775
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
776
// Keep in sync with ReactDOMUnstableNativeDependencies.js
777
// and ReactTestUtils.js. This is an array for better minification.
778
Events: [
755
- ReactDOMComponentTree.getInstanceFromNode,
756
- ReactDOMComponentTree.getNodeFromInstance,
757
- ReactDOMComponentTree.getFiberCurrentPropsFromNode,
758
- EventPluginHub.injection.injectEventPluginsByName,
759
- EventPluginRegistry.eventNameDispatchConfigs,
760
- EventPropagators.accumulateTwoPhaseDispatches,
761
- EventPropagators.accumulateDirectDispatches,
762
- ReactControlledComponent.enqueueStateRestore,
763
- ReactControlledComponent.restoreStateIfNeeded,
764
- ReactDOMEventListener.dispatchEvent,
765
- EventPluginHub.runEventsInBatch,
779
+ getInstanceFromNode,
780
+ getNodeFromInstance,
781
+ getFiberCurrentPropsFromNode,
782
+ EventPluginHubInjection.injectEventPluginsByName,
783
+ eventNameDispatchConfigs,
784
+ accumulateTwoPhaseDispatches,
785
+ accumulateDirectDispatches,
786
+ enqueueStateRestore,
787
+ restoreStateIfNeeded,
788
+ dispatchEvent,
789
+ runEventsInBatch,
790
],
791
},
792
};
@@ -790,8 +814,8 @@ if (enableStableConcurrentModeAPIs) {
814
ReactDOM.unstable_createRoot = createRoot;
815
}
816
793
-const foundDevTools = DOMRenderer.injectIntoDevTools({
794
- findFiberByHostInstance: ReactDOMComponentTree.getClosestInstanceFromNode,
817
+const foundDevTools = injectIntoDevTools({
818
+ findFiberByHostInstance: getClosestInstanceFromNode,
819
bundleType: __DEV__ ? 1 : 0,
820
version: ReactVersion,
821
rendererPackageName: 'react-dom',
packages/react-dom/src/client/ReactDOMClientInjection.js
+5
-5
@@ -5,8 +5,8 @@
5
* LICENSE file in the root directory of this source tree.
6
*/
7
8
-import * as EventPluginHub from 'events/EventPluginHub';
9
-import * as EventPluginUtils from 'events/EventPluginUtils';
8
+import {injection as EventPluginHubInjection} from 'events/EventPluginHub';
9
+import {setComponentTree} from 'events/EventPluginUtils';
10
11
import {
12
getFiberCurrentPropsFromNode,
@@ -23,8 +23,8 @@ import SimpleEventPlugin from '../events/SimpleEventPlugin';
23
/**
24
* Inject modules for resolving DOM hierarchy and plugin ordering.
25
*/
26
-EventPluginHub.injection.injectEventPluginOrder(DOMEventPluginOrder);
27
-EventPluginUtils.setComponentTree(
26
+EventPluginHubInjection.injectEventPluginOrder(DOMEventPluginOrder);
27
+setComponentTree(
28
getFiberCurrentPropsFromNode,
29
getInstanceFromNode,
30
getNodeFromInstance,
@@ -34,7 +34,7 @@ EventPluginUtils.setComponentTree(
34
* Some important event plugins included by default (without having to require
35
* them).
36
*/
37
-EventPluginHub.injection.injectEventPluginsByName({
37
+EventPluginHubInjection.injectEventPluginsByName({
38
SimpleEventPlugin: SimpleEventPlugin,
39
EnterLeaveEventPlugin: EnterLeaveEventPlugin,
40
ChangeEventPlugin: ChangeEventPlugin,
packages/react-dom/src/client/ReactDOMComponent.js
+84
-76
@@ -14,12 +14,39 @@ import warning from 'shared/warning';
14
import {canUseDOM} from 'shared/ExecutionEnvironment';
15
import warningWithoutStack from 'shared/warningWithoutStack';
16
17
-import * as DOMPropertyOperations from './DOMPropertyOperations';
18
-import * as ReactDOMInput from './ReactDOMInput';
19
-import * as ReactDOMOption from './ReactDOMOption';
20
-import * as ReactDOMSelect from './ReactDOMSelect';
21
-import * as ReactDOMTextarea from './ReactDOMTextarea';
22
-import * as inputValueTracking from './inputValueTracking';
17
+import {
18
+ getValueForAttribute,
19
+ getValueForProperty,
20
+ setValueForProperty,
21
+} from './DOMPropertyOperations';
22
+import {
23
+ initWrapperState as ReactDOMInputInitWrapperState,
24
+ getHostProps as ReactDOMInputGetHostProps,
25
+ postMountWrapper as ReactDOMInputPostMountWrapper,
26
+ updateChecked as ReactDOMInputUpdateChecked,
27
+ updateWrapper as ReactDOMInputUpdateWrapper,
28
+ restoreControlledState as ReactDOMInputRestoreControlledState,
29
+} from './ReactDOMInput';
30
+import {
31
+ getHostProps as ReactDOMOptionGetHostProps,
32
+ postMountWrapper as ReactDOMOptionPostMountWrapper,
33
+ validateProps as ReactDOMOptionValidateProps,
34
+} from './ReactDOMOption';
35
+import {
36
+ initWrapperState as ReactDOMSelectInitWrapperState,
37
+ getHostProps as ReactDOMSelectGetHostProps,
38
+ postMountWrapper as ReactDOMSelectPostMountWrapper,
39
+ restoreControlledState as ReactDOMSelectRestoreControlledState,
40
+ postUpdateWrapper as ReactDOMSelectPostUpdateWrapper,
41
+} from './ReactDOMSelect';
42
+import {
43
+ initWrapperState as ReactDOMTextareaInitWrapperState,
44
+ getHostProps as ReactDOMTextareaGetHostProps,
45
+ postMountWrapper as ReactDOMTextareaPostMountWrapper,
46
+ updateWrapper as ReactDOMTextareaUpdateWrapper,
47
+ restoreControlledState as ReactDOMTextareaRestoreControlledState,
48
+} from './ReactDOMTextarea';
49
+import {track} from './inputValueTracking';
50
import setInnerHTML from './setInnerHTML';
51
import setTextContent from './setTextContent';
52
import {
@@ -32,7 +59,11 @@ import {
59
} from '../events/DOMTopLevelEventTypes';
60
import {listenTo, trapBubbledEvent} from '../events/ReactBrowserEventEmitter';
61
import {mediaEventTypes} from '../events/DOMTopLevelEventTypes';
35
-import * as CSSPropertyOperations from '../shared/CSSPropertyOperations';
62
+import {
63
+ createDangerousStringForStyles,
64
+ setValueForStyles,
65
+ validateShorthandPropertyCollisionInDev,
66
+} from '../shared/CSSPropertyOperations';
67
import {Namespaces, getIntrinsicNamespace} from '../shared/DOMNamespaces';
68
import {
69
getPropertyInfo,
@@ -276,7 +307,7 @@ function setInitialDOMProperties(
307
}
308
}
309
// Relies on `updateStylesByID` not mutating `styleUpdates`.
279
- CSSPropertyOperations.setValueForStyles(domElement, nextProp);
310
+ setValueForStyles(domElement, nextProp);
311
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
312
const nextHtml = nextProp ? nextProp[HTML] : undefined;
313
if (nextHtml != null) {
@@ -313,12 +344,7 @@ function setInitialDOMProperties(
344
ensureListeningTo(rootContainerElement, propKey);
345
}
346
} else if (nextProp != null) {
316
- DOMPropertyOperations.setValueForProperty(
317
- domElement,
318
- propKey,
319
- nextProp,
320
- isCustomComponentTag,
321
- );
347
+ setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);
348
}
349
}
350
}
@@ -334,18 +360,13 @@ function updateDOMProperties(
360
const propKey = updatePayload[i];
361
const propValue = updatePayload[i + 1];
362
if (propKey === STYLE) {
337
- CSSPropertyOperations.setValueForStyles(domElement, propValue);
363
+ setValueForStyles(domElement, propValue);
364
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
365
setInnerHTML(domElement, propValue);
366
} else if (propKey === CHILDREN) {
367
setTextContent(domElement, propValue);
368
} else {
343
- DOMPropertyOperations.setValueForProperty(
344
- domElement,
345
- propKey,
346
- propValue,
347
- isCustomComponentTag,
348
- );
369
+ setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);
370
}
371
}
372
}
@@ -505,28 +526,28 @@ export function setInitialProperties(
526
props = rawProps;
527
break;
528
case 'input':
508
- ReactDOMInput.initWrapperState(domElement, rawProps);
509
- props = ReactDOMInput.getHostProps(domElement, rawProps);
529
+ ReactDOMInputInitWrapperState(domElement, rawProps);
530
+ props = ReactDOMInputGetHostProps(domElement, rawProps);
531
trapBubbledEvent(TOP_INVALID, domElement);
532
// For controlled components we always need to ensure we're listening
533
// to onChange. Even if there is no listener.
534
ensureListeningTo(rootContainerElement, 'onChange');
535
break;
536
case 'option':
516
- ReactDOMOption.validateProps(domElement, rawProps);
517
- props = ReactDOMOption.getHostProps(domElement, rawProps);
537
+ ReactDOMOptionValidateProps(domElement, rawProps);
538
+ props = ReactDOMOptionGetHostProps(domElement, rawProps);
539
break;
540
case 'select':
520
- ReactDOMSelect.initWrapperState(domElement, rawProps);
521
- props = ReactDOMSelect.getHostProps(domElement, rawProps);
541
+ ReactDOMSelectInitWrapperState(domElement, rawProps);
542
+ props = ReactDOMSelectGetHostProps(domElement, rawProps);
543
trapBubbledEvent(TOP_INVALID, domElement);
544
// For controlled components we always need to ensure we're listening
545
// to onChange. Even if there is no listener.
546
ensureListeningTo(rootContainerElement, 'onChange');
547
break;
548
case 'textarea':
528
- ReactDOMTextarea.initWrapperState(domElement, rawProps);
529
- props = ReactDOMTextarea.getHostProps(domElement, rawProps);
549
+ ReactDOMTextareaInitWrapperState(domElement, rawProps);
550
+ props = ReactDOMTextareaGetHostProps(domElement, rawProps);
551
trapBubbledEvent(TOP_INVALID, domElement);
552
// For controlled components we always need to ensure we're listening
553
// to onChange. Even if there is no listener.
@@ -550,20 +571,20 @@ export function setInitialProperties(
571
case 'input':
572
// TODO: Make sure we check if this is still unmounted or do any clean
573
// up necessary since we never stop tracking anymore.
553
- inputValueTracking.track((domElement: any));
554
- ReactDOMInput.postMountWrapper(domElement, rawProps, false);
574
+ track((domElement: any));
575
+ ReactDOMInputPostMountWrapper(domElement, rawProps, false);
576
break;
577
case 'textarea':
578
// TODO: Make sure we check if this is still unmounted or do any clean
579
// up necessary since we never stop tracking anymore.
559
- inputValueTracking.track((domElement: any));
560
- ReactDOMTextarea.postMountWrapper(domElement, rawProps);
580
+ track((domElement: any));
581
+ ReactDOMTextareaPostMountWrapper(domElement, rawProps);
582
break;
583
case 'option':
563
- ReactDOMOption.postMountWrapper(domElement, rawProps);
584
+ ReactDOMOptionPostMountWrapper(domElement, rawProps);
585
break;
586
case 'select':
566
- ReactDOMSelect.postMountWrapper(domElement, rawProps);
587
+ ReactDOMSelectPostMountWrapper(domElement, rawProps);
588
break;
589
default:
590
if (typeof props.onClick === 'function') {
@@ -592,23 +613,23 @@ export function diffProperties(
613
let nextProps: Object;
614
switch (tag) {
615
case 'input':
595
- lastProps = ReactDOMInput.getHostProps(domElement, lastRawProps);
596
- nextProps = ReactDOMInput.getHostProps(domElement, nextRawProps);
616
+ lastProps = ReactDOMInputGetHostProps(domElement, lastRawProps);
617
+ nextProps = ReactDOMInputGetHostProps(domElement, nextRawProps);
618
updatePayload = [];
619
break;
620
case 'option':
600
- lastProps = ReactDOMOption.getHostProps(domElement, lastRawProps);
601
- nextProps = ReactDOMOption.getHostProps(domElement, nextRawProps);
621
+ lastProps = ReactDOMOptionGetHostProps(domElement, lastRawProps);
622
+ nextProps = ReactDOMOptionGetHostProps(domElement, nextRawProps);
623
updatePayload = [];
624
break;
625
case 'select':
605
- lastProps = ReactDOMSelect.getHostProps(domElement, lastRawProps);
606
- nextProps = ReactDOMSelect.getHostProps(domElement, nextRawProps);
626
+ lastProps = ReactDOMSelectGetHostProps(domElement, lastRawProps);
627
+ nextProps = ReactDOMSelectGetHostProps(domElement, nextRawProps);
628
updatePayload = [];
629
break;
630
case 'textarea':
610
- lastProps = ReactDOMTextarea.getHostProps(domElement, lastRawProps);
611
- nextProps = ReactDOMTextarea.getHostProps(domElement, nextRawProps);
631
+ lastProps = ReactDOMTextareaGetHostProps(domElement, lastRawProps);
632
+ nextProps = ReactDOMTextareaGetHostProps(domElement, nextRawProps);
633
updatePayload = [];
634
break;
635
default:
@@ -767,10 +788,7 @@ export function diffProperties(
788
}
789
if (styleUpdates) {
790
if (__DEV__) {
770
- CSSPropertyOperations.validateShorthandPropertyCollisionInDev(
771
- styleUpdates,
772
- nextProps[STYLE],
773
- );
791
+ validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);
792
}
793
(updatePayload = updatePayload || []).push(STYLE, styleUpdates);
794
}
@@ -793,7 +811,7 @@ export function updateProperties(
811
nextRawProps.type === 'radio' &&
812
nextRawProps.name != null
813
) {
796
- ReactDOMInput.updateChecked(domElement, nextRawProps);
814
+ ReactDOMInputUpdateChecked(domElement, nextRawProps);
815
}
816
817
const wasCustomComponentTag = isCustomComponent(tag, lastRawProps);
@@ -813,15 +831,15 @@ export function updateProperties(
831
// Update the wrapper around inputs *after* updating props. This has to
832
// happen after `updateDOMProperties`. Otherwise HTML5 input validations
833
// raise warnings and prevent the new value from being assigned.
816
- ReactDOMInput.updateWrapper(domElement, nextRawProps);
834
+ ReactDOMInputUpdateWrapper(domElement, nextRawProps);
835
break;
836
case 'textarea':
819
- ReactDOMTextarea.updateWrapper(domElement, nextRawProps);
837
+ ReactDOMTextareaUpdateWrapper(domElement, nextRawProps);
838
break;
839
case 'select':
840
// <select> value update needs to occur after <option> children
841
// reconciliation
824
- ReactDOMSelect.postUpdateWrapper(domElement, nextRawProps);
842
+ ReactDOMSelectPostUpdateWrapper(domElement, nextRawProps);
843
break;
844
}
845
}
@@ -896,24 +914,24 @@ export function diffHydratedProperties(
914
trapBubbledEvent(TOP_TOGGLE, domElement);
915
break;
916
case 'input':
899
- ReactDOMInput.initWrapperState(domElement, rawProps);
917
+ ReactDOMInputInitWrapperState(domElement, rawProps);
918
trapBubbledEvent(TOP_INVALID, domElement);
919
// For controlled components we always need to ensure we're listening
920
// to onChange. Even if there is no listener.
921
ensureListeningTo(rootContainerElement, 'onChange');
922
break;
923
case 'option':
906
- ReactDOMOption.validateProps(domElement, rawProps);
924
+ ReactDOMOptionValidateProps(domElement, rawProps);
925
break;
926
case 'select':
909
- ReactDOMSelect.initWrapperState(domElement, rawProps);
927
+ ReactDOMSelectInitWrapperState(domElement, rawProps);
928
trapBubbledEvent(TOP_INVALID, domElement);
929
// For controlled components we always need to ensure we're listening
930
// to onChange. Even if there is no listener.
931
ensureListeningTo(rootContainerElement, 'onChange');
932
break;
933
case 'textarea':
916
- ReactDOMTextarea.initWrapperState(domElement, rawProps);
934
+ ReactDOMTextareaInitWrapperState(domElement, rawProps);
935
trapBubbledEvent(TOP_INVALID, domElement);
936
// For controlled components we always need to ensure we're listening
937
// to onChange. Even if there is no listener.
@@ -1021,9 +1039,7 @@ export function diffHydratedProperties(
1039
extraAttributeNames.delete(propKey);
1040
1041
if (canDiffStyleForHydrationWarning) {
1024
- const expectedStyle = CSSPropertyOperations.createDangerousStringForStyles(
1025
- nextProp,
1026
- );
1042
+ const expectedStyle = createDangerousStringForStyles(nextProp);
1043
serverValue = domElement.getAttribute('style');
1044
if (expectedStyle !== serverValue) {
1045
warnForPropDifference(propKey, serverValue, expectedStyle);
@@ -1032,11 +1048,7 @@ export function diffHydratedProperties(
1048
} else if (isCustomComponentTag) {
1049
// $FlowFixMe - Should be inferred as not undefined.
1050
extraAttributeNames.delete(propKey.toLowerCase());
1035
- serverValue = DOMPropertyOperations.getValueForAttribute(
1036
- domElement,
1037
- propKey,
1038
- nextProp,
1039
- );
1051
+ serverValue = getValueForAttribute(domElement, propKey, nextProp);
1052
1053
if (nextProp !== serverValue) {
1054
warnForPropDifference(propKey, serverValue, nextProp);
@@ -1054,7 +1066,7 @@ export function diffHydratedProperties(
1066
if (propertyInfo !== null) {
1067
// $FlowFixMe - Should be inferred as not undefined.
1068
extraAttributeNames.delete(propertyInfo.attributeName);
1057
- serverValue = DOMPropertyOperations.getValueForProperty(
1069
+ serverValue = getValueForProperty(
1070
domElement,
1071
propKey,
1072
nextProp,
@@ -1083,11 +1095,7 @@ export function diffHydratedProperties(
1095
// $FlowFixMe - Should be inferred as not undefined.
1096
extraAttributeNames.delete(propKey);
1097
}
1086
- serverValue = DOMPropertyOperations.getValueForAttribute(
1087
- domElement,
1088
- propKey,
1089
- nextProp,
1090
- );
1098
+ serverValue = getValueForAttribute(domElement, propKey, nextProp);
1099
}
1100
1101
if (nextProp !== serverValue && !isMismatchDueToBadCasing) {
@@ -1109,14 +1117,14 @@ export function diffHydratedProperties(
1117
case 'input':
1118
// TODO: Make sure we check if this is still unmounted or do any clean
1119
// up necessary since we never stop tracking anymore.
1112
- inputValueTracking.track((domElement: any));
1113
- ReactDOMInput.postMountWrapper(domElement, rawProps, true);
1120
+ track((domElement: any));
1121
+ ReactDOMInputPostMountWrapper(domElement, rawProps, true);
1122
break;
1123
case 'textarea':
1124
// TODO: Make sure we check if this is still unmounted or do any clean
1125
// up necessary since we never stop tracking anymore.
1118
- inputValueTracking.track((domElement: any));
1119
- ReactDOMTextarea.postMountWrapper(domElement, rawProps);
1126
+ track((domElement: any));
1127
+ ReactDOMTextareaPostMountWrapper(domElement, rawProps);
1128
break;
1129
case 'select':
1130
case 'option':
@@ -1235,13 +1243,13 @@ export function restoreControlledState(
1243
): void {
1244
switch (tag) {
1245
case 'input':
1238
- ReactDOMInput.restoreControlledState(domElement, props);
1246
+ ReactDOMInputRestoreControlledState(domElement, props);
1247
return;
1248
case 'textarea':
1241
- ReactDOMTextarea.restoreControlledState(domElement, props);
1249
+ ReactDOMTextareaRestoreControlledState(domElement, props);
1250
return;
1251
case 'select':
1244
- ReactDOMSelect.restoreControlledState(domElement, props);
1252
+ ReactDOMSelectRestoreControlledState(domElement, props);
1253
return;
1254
}
1255
}
packages/react-dom/src/client/ReactDOMFB.js
+16
-8
@@ -7,22 +7,30 @@
7
* @flow
8
*/
9
10
-import * as ReactFiberTreeReflection from 'react-reconciler/reflection';
11
-import * as ReactInstanceMap from 'shared/ReactInstanceMap';
10
+import {findCurrentFiberUsingSlowPath} from 'react-reconciler/reflection';
11
+import {get as getInstance} from 'shared/ReactInstanceMap';
12
import {addUserTimingListener} from 'shared/ReactFeatureFlags';
13
14
import ReactDOM from './ReactDOM';
15
-import * as ReactBrowserEventEmitter from '../events/ReactBrowserEventEmitter';
16
-import * as ReactDOMComponentTree from './ReactDOMComponentTree';
15
+import {isEnabled} from '../events/ReactBrowserEventEmitter';
16
+import {getClosestInstanceFromNode} from './ReactDOMComponentTree';
17
18
Object.assign(
19
(ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: any),
20
{
21
// These are real internal dependencies that are trickier to remove:
22
- ReactBrowserEventEmitter,
23
- ReactFiberTreeReflection,
24
- ReactDOMComponentTree,
25
- ReactInstanceMap,
22
+ ReactBrowserEventEmitter: {
23
+ isEnabled,
24
+ },
25
+ ReactFiberTreeReflection: {
26
+ findCurrentFiberUsingSlowPath,
27
+ },
28
+ ReactDOMComponentTree: {
29
+ getClosestInstanceFromNode,
30
+ },
31
+ ReactInstanceMap: {
32
+ get: getInstance,
33
+ },
34
// Perf experiment
35
addUserTimingListener,
36
},
packages/react-dom/src/client/ReactDOMHostConfig.js
+10
-7
@@ -23,10 +23,13 @@ import {
23
warnForInsertedHydratedElement,
24
warnForInsertedHydratedText,
25
} from './ReactDOMComponent';
26
-import * as ReactInputSelection from './ReactInputSelection';
26
+import {getSelectionInformation, restoreSelection} from './ReactInputSelection';
27
import setTextContent from './setTextContent';
28
import {validateDOMNesting, updatedAncestorInfo} from './validateDOMNesting';
29
-import * as ReactBrowserEventEmitter from '../events/ReactBrowserEventEmitter';
29
+import {
30
+ isEnabled as ReactBrowserEventEmitterIsEnabled,
31
+ setEnabled as ReactBrowserEventEmitterSetEnabled,
32
+} from '../events/ReactBrowserEventEmitter';
33
import {getChildNamespace} from '../shared/DOMNamespaces';
34
import {
35
ELEMENT_NODE,
@@ -152,15 +155,15 @@ export function getPublicInstance(instance: Instance): * {
155
}
156
157
export function prepareForCommit(containerInfo: Container): void {
155
- eventsEnabled = ReactBrowserEventEmitter.isEnabled();
156
- selectionInformation = ReactInputSelection.getSelectionInformation();
157
- ReactBrowserEventEmitter.setEnabled(false);
158
+ eventsEnabled = ReactBrowserEventEmitterIsEnabled();
159
+ selectionInformation = getSelectionInformation();
160
+ ReactBrowserEventEmitterSetEnabled(false);
161
}
162
163
export function resetAfterCommit(containerInfo: Container): void {
161
- ReactInputSelection.restoreSelection(selectionInformation);
164
+ restoreSelection(selectionInformation);
165
selectionInformation = null;
163
- ReactBrowserEventEmitter.setEnabled(eventsEnabled);
166
+ ReactBrowserEventEmitterSetEnabled(eventsEnabled);
167
eventsEnabled = null;
168
}
169
packages/react-dom/src/client/ReactDOMInput.js
+4
-4
@@ -12,11 +12,11 @@ import {getCurrentFiberOwnerNameInDevOrNull} from 'react-reconciler/src/ReactCur
12
import invariant from 'shared/invariant';
13
import warning from 'shared/warning';
14
15
-import * as DOMPropertyOperations from './DOMPropertyOperations';
15
+import {setValueForProperty} from './DOMPropertyOperations';
16
import {getFiberCurrentPropsFromNode} from './ReactDOMComponentTree';
17
import {getToStringValue, toString} from './ToStringValue';
18
import ReactControlledValuePropTypes from '../shared/ReactControlledValuePropTypes';
19
-import * as inputValueTracking from './inputValueTracking';
19
+import {updateValueIfChanged} from './inputValueTracking';
20
import {disableInputAttributeSyncing} from 'shared/ReactFeatureFlags';
21
22
import type {ToStringValue} from './ToStringValue';
@@ -129,7 +129,7 @@ export function updateChecked(element: Element, props: Object) {
129
const node = ((element: any): InputWithWrapperState);
130
const checked = props.checked;
131
if (checked != null) {
132
- DOMPropertyOperations.setValueForProperty(node, 'checked', checked, false);
132
+ setValueForProperty(node, 'checked', checked, false);
133
}
134
}
135
@@ -389,7 +389,7 @@ function updateNamedCousins(rootNode, props) {
389
390
// We need update the tracked value on the named cousin since the value
391
// was changed but the input saw no event or value set
392
- inputValueTracking.updateValueIfChanged(otherNode);
392
+ updateValueIfChanged(otherNode);
393
394
// If this is a controlled radio button group, forcing the input that
395
// was previously checked to update will cause it to be come re-checked
packages/react-dom/src/client/ReactInputSelection.js
+3
-3
@@ -7,7 +7,7 @@
7
8
import getActiveElement from './getActiveElement';
9
10
-import * as ReactDOMSelection from './ReactDOMSelection';
10
+import {getOffsets, setOffsets} from './ReactDOMSelection';
11
import {ELEMENT_NODE, TEXT_NODE} from '../shared/HTMLNodeType';
12
13
function isTextNode(node) {
@@ -152,7 +152,7 @@ export function getSelection(input) {
152
};
153
} else {
154
// Content editable or old IE textarea.
155
- selection = ReactDOMSelection.getOffsets(input);
155
+ selection = getOffsets(input);
156
}
157
158
return selection || {start: 0, end: 0};
@@ -174,6 +174,6 @@ export function setSelection(input, offsets) {
174
input.selectionStart = start;
175
input.selectionEnd = Math.min(end, input.value.length);
176
} else {
177
- ReactDOMSelection.setOffsets(input, offsets);
177
+ setOffsets(input, offsets);
178
}
179
}
packages/react-dom/src/events/BeforeInputEventPlugin.js
+9
-5
@@ -22,7 +22,11 @@ import {
22
TOP_TEXT_INPUT,
23
TOP_PASTE,
24
} from './DOMTopLevelEventTypes';
25
-import * as FallbackCompositionState from './FallbackCompositionState';
25
+import {
26
+ getData as FallbackCompositionStateGetData,
27
+ initialize as FallbackCompositionStateInitialize,
28
+ reset as FallbackCompositionStateReset,
29
+} from './FallbackCompositionState';
30
import SyntheticCompositionEvent from './SyntheticCompositionEvent';
31
import SyntheticInputEvent from './SyntheticInputEvent';
32
@@ -246,10 +250,10 @@ function extractCompositionEvent(
250
// The current composition is stored statically and must not be
251
// overwritten while composition continues.
252
if (!isComposing && eventType === eventTypes.compositionStart) {
249
- isComposing = FallbackCompositionState.initialize(nativeEventTarget);
253
+ isComposing = FallbackCompositionStateInitialize(nativeEventTarget);
254
} else if (eventType === eventTypes.compositionEnd) {
255
if (isComposing) {
252
- fallbackData = FallbackCompositionState.getData();
256
+ fallbackData = FallbackCompositionStateGetData();
257
}
258
}
259
}
@@ -346,8 +350,8 @@ function getFallbackBeforeInputChars(topLevelType: TopLevelType, nativeEvent) {
350
(!canUseCompositionEvent &&
351
isFallbackCompositionEnd(topLevelType, nativeEvent))
352
) {
349
- const chars = FallbackCompositionState.getData();
350
- FallbackCompositionState.reset();
353
+ const chars = FallbackCompositionStateGetData();
354
+ FallbackCompositionStateReset();
355
isComposing = false;
356
return chars;
357
}
packages/react-dom/src/events/ChangeEventPlugin.js
+4
-4
@@ -5,7 +5,7 @@
5
* LICENSE file in the root directory of this source tree.
6
*/
7
8
-import * as EventPluginHub from 'events/EventPluginHub';
8
+import {runEventsInBatch} from 'events/EventPluginHub';
9
import {accumulateTwoPhaseDispatches} from 'events/EventPropagators';
10
import {enqueueStateRestore} from 'events/ReactControlledComponent';
11
import {batchedUpdates} from 'events/ReactGenericBatching';
@@ -26,7 +26,7 @@ import {
26
import getEventTarget from './getEventTarget';
27
import isEventSupported from './isEventSupported';
28
import {getNodeFromInstance} from '../client/ReactDOMComponentTree';
29
-import * as inputValueTracking from '../client/inputValueTracking';
29
+import {updateValueIfChanged} from '../client/inputValueTracking';
30
import {setDefaultValue} from '../client/ReactDOMInput';
31
import {disableInputAttributeSyncing} from 'shared/ReactFeatureFlags';
32
@@ -100,12 +100,12 @@ function manualDispatchChangeEvent(nativeEvent) {
100
}
101
102
function runEventInBatch(event) {
103
- EventPluginHub.runEventsInBatch(event);
103
+ runEventsInBatch(event);
104
}
105
106
function getInstIfValueChanged(targetInst) {
107
const targetNode = getNodeFromInstance(targetInst);
108
- if (inputValueTracking.updateValueIfChanged(targetNode)) {
108
+ if (updateValueIfChanged(targetNode)) {
109
return targetInst;
110
}
111
}
packages/react-dom/src/events/SelectEventPlugin.js
+2
-5
@@ -25,7 +25,7 @@ import {
25
import {isListeningToAllDependencies} from './ReactBrowserEventEmitter';
26
import getActiveElement from '../client/getActiveElement';
27
import {getNodeFromInstance} from '../client/ReactDOMComponentTree';
28
-import * as ReactInputSelection from '../client/ReactInputSelection';
28
+import {hasSelectionCapabilities} from '../client/ReactInputSelection';
29
import {DOCUMENT_NODE} from '../shared/HTMLNodeType';
30
31
const skipSelectionChangeEvent =
@@ -66,10 +66,7 @@ let mouseDown = false;
66
* @return {object}
67
*/
68
function getSelection(node) {
69
- if (
70
- 'selectionStart' in node &&
71
- ReactInputSelection.hasSelectionCapabilities(node)
72
- ) {
69
+ if ('selectionStart' in node && hasSelectionCapabilities(node)) {
70
return {
71
start: node.selectionStart,
72
end: node.selectionEnd,
packages/react-dom/src/test-utils/ReactTestUtils.js
+4
-4
@@ -8,7 +8,7 @@
8
import React from 'react';
9
import ReactDOM from 'react-dom';
10
import {findCurrentFiberUsingSlowPath} from 'react-reconciler/reflection';
11
-import * as ReactInstanceMap from 'shared/ReactInstanceMap';
11
+import {get as getInstance} from 'shared/ReactInstanceMap';
12
import {
13
ClassComponent,
14
FunctionComponent,
@@ -121,7 +121,7 @@ function validateClassInstance(inst, methodName) {
121
// This is probably too relaxed but it's existing behavior.
122
return;
123
}
124
- if (ReactInstanceMap.get(inst)) {
124
+ if (getInstance(inst)) {
125
// This is a public instance indeed.
126
return;
127
}
@@ -198,7 +198,7 @@ const ReactTestUtils = {
198
if (!ReactTestUtils.isCompositeComponent(inst)) {
199
return false;
200
}
201
- const internalInstance = ReactInstanceMap.get(inst);
201
+ const internalInstance = getInstance(inst);
202
const constructor = internalInstance.type;
203
return constructor === type;
204
},
@@ -208,7 +208,7 @@ const ReactTestUtils = {
208
if (!inst) {
209
return [];
210
}
211
- const internalInstance = ReactInstanceMap.get(inst);
211
+ const internalInstance = getInstance(inst);
212
return findAllInRenderedFiberTreeInternal(internalInstance, test);
213
},
214
packages/react-dom/src/unstable-native-dependencies/ReactDOMUnstableNativeDependencies.js
+2
-2
@@ -6,7 +6,7 @@
6
*/
7
8
import ReactDOM from 'react-dom';
9
-import * as EventPluginUtils from 'events/EventPluginUtils';
9
+import {setComponentTree} from 'events/EventPluginUtils';
10
import ResponderEventPlugin from 'events/ResponderEventPlugin';
11
import ResponderTouchHistoryStore from 'events/ResponderTouchHistoryStore';
12
@@ -19,7 +19,7 @@ const [
19
injectEventPluginsByName,
20
] = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Events;
21
22
-EventPluginUtils.setComponentTree(
22
+setComponentTree(
23
getFiberCurrentPropsFromNode,
24
getInstanceFromNode,
25
getNodeFromInstance,
packages/react-native-renderer/src/NativeMethodsMixin.js
+2
-5
@@ -20,7 +20,7 @@ import invariant from 'shared/invariant';
20
import TextInputState from 'TextInputState';
21
import UIManager from 'UIManager';
22
23
-import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
23
+import {create} from './ReactNativeAttributePayload';
24
import {
25
mountSafeCallback_NOT_REALLY_SAFE,
26
throwOnStylesProp,
@@ -149,10 +149,7 @@ export default function(
149
warnForStyleProps(nativeProps, viewConfig.validAttributes);
150
}
151
152
- const updatePayload = ReactNativeAttributePayload.create(
153
- nativeProps,
154
- viewConfig.validAttributes,
155
- );
152
+ const updatePayload = create(nativeProps, viewConfig.validAttributes);
153
154
// Avoid the overhead of bridge calls if there's no update.
155
// This is an expensive no-op for Android, and causes an unnecessary
packages/react-native-renderer/src/ReactFabric.js
+26
-19
@@ -12,15 +12,25 @@ import type {ReactNodeList} from 'shared/ReactTypes';
12
13
import './ReactFabricInjection';
14
15
-import * as ReactFabricRenderer from 'react-reconciler/inline.fabric';
16
-
17
-import * as ReactPortal from 'shared/ReactPortal';
18
-import * as ReactGenericBatching from 'events/ReactGenericBatching';
15
+import {
16
+ findHostInstance,
17
+ findHostInstanceWithWarning,
18
+ batchedUpdates as batchedUpdatesImpl,
19
+ interactiveUpdates,
20
+ flushInteractiveUpdates,
21
+ createContainer,
22
+ updateContainer,
23
+ injectIntoDevTools,
24
+ getPublicRootInstance,
25
+} from 'react-reconciler/inline.fabric';
26
+
27
+import {createPortal} from 'shared/ReactPortal';
28
+import {setBatchingImplementation} from 'events/ReactGenericBatching';
29
import ReactVersion from 'shared/ReactVersion';
30
31
import NativeMethodsMixin from './NativeMethodsMixin';
32
import ReactNativeComponent from './ReactNativeComponent';
23
-import * as ReactFabricComponentTree from './ReactFabricComponentTree';
33
+import {getClosestInstanceFromNode} from './ReactFabricComponentTree';
34
import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
35
36
import ReactSharedInternals from 'shared/ReactSharedInternals';
@@ -28,9 +38,6 @@ import getComponentName from 'shared/getComponentName';
38
import warningWithoutStack from 'shared/warningWithoutStack';
39
40
const ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
31
-const findHostInstance = ReactFabricRenderer.findHostInstance;
32
-const findHostInstanceWithWarning =
33
- ReactFabricRenderer.findHostInstanceWithWarning;
41
42
function findNodeHandle(componentOrHandle: any): ?number {
43
if (__DEV__) {
@@ -84,10 +91,10 @@ function findNodeHandle(componentOrHandle: any): ?number {
91
return hostInstance._nativeTag;
92
}
93
87
-ReactGenericBatching.setBatchingImplementation(
88
- ReactFabricRenderer.batchedUpdates,
89
- ReactFabricRenderer.interactiveUpdates,
90
- ReactFabricRenderer.flushInteractiveUpdates,
94
+setBatchingImplementation(
95
+ batchedUpdatesImpl,
96
+ interactiveUpdates,
97
+ flushInteractiveUpdates,
98
);
99
100
const roots = new Map();
@@ -103,19 +110,19 @@ const ReactFabric: ReactFabricType = {
110
if (!root) {
111
// TODO (bvaughn): If we decide to keep the wrapper component,
112
// We could create a wrapper for containerTag as well to reduce special casing.
106
- root = ReactFabricRenderer.createContainer(containerTag, false, false);
113
+ root = createContainer(containerTag, false, false);
114
roots.set(containerTag, root);
115
}
109
- ReactFabricRenderer.updateContainer(element, root, null, callback);
116
+ updateContainer(element, root, null, callback);
117
111
- return ReactFabricRenderer.getPublicRootInstance(root);
118
+ return getPublicRootInstance(root);
119
},
120
121
unmountComponentAtNode(containerTag: number) {
122
const root = roots.get(containerTag);
123
if (root) {
124
// TODO: Is it safe to reset this now or should I wait since this unmount could be deferred?
118
- ReactFabricRenderer.updateContainer(null, root, null, () => {
125
+ updateContainer(null, root, null, () => {
126
roots.delete(containerTag);
127
});
128
}
@@ -126,7 +133,7 @@ const ReactFabric: ReactFabricType = {
133
containerTag: number,
134
key: ?string = null,
135
) {
129
- return ReactPortal.createPortal(children, containerTag, null, key);
136
+ return createPortal(children, containerTag, null, key);
137
},
138
139
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
@@ -135,8 +142,8 @@ const ReactFabric: ReactFabricType = {
142
},
143
};
144
138
-ReactFabricRenderer.injectIntoDevTools({
139
- findFiberByHostInstance: ReactFabricComponentTree.getClosestInstanceFromNode,
145
+injectIntoDevTools({
146
+ findFiberByHostInstance: getClosestInstanceFromNode,
147
getInspectorDataForViewTag: getInspectorDataForViewTag,
148
bundleType: __DEV__ ? 1 : 0,
149
version: ReactVersion,
packages/react-native-renderer/src/ReactFabricHostConfig.js
+18
-25
@@ -19,9 +19,14 @@ import {
19
mountSafeCallback_NOT_REALLY_SAFE,
20
warnForStyleProps,
21
} from './NativeMethodsMixinUtils';
22
-import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
23
-import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
24
-import * as ReactNativeViewConfigRegistry from 'ReactNativeViewConfigRegistry';
22
+import {create, diff} from './ReactNativeAttributePayload';
23
+import {
24
+ now as ReactNativeFrameSchedulingNow,
25
+ cancelDeferredCallback as ReactNativeFrameSchedulingCancelDeferredCallback,
26
+ scheduleDeferredCallback as ReactNativeFrameSchedulingScheduleDeferredCallback,
27
+ shouldYield as ReactNativeFrameSchedulingShouldYield,
28
+} from './ReactNativeFrameScheduling';
29
+import {get as getViewConfigForType} from 'ReactNativeViewConfigRegistry';
30
31
import deepFreezeAndThrowOnMutationInDev from 'deepFreezeAndThrowOnMutationInDev';
32
import invariant from 'shared/invariant';
@@ -138,10 +143,7 @@ class ReactFabricHostComponent {
143
warnForStyleProps(nativeProps, this.viewConfig.validAttributes);
144
}
145
141
- const updatePayload = ReactNativeAttributePayload.create(
142
- nativeProps,
143
- this.viewConfig.validAttributes,
144
- );
146
+ const updatePayload = create(nativeProps, this.viewConfig.validAttributes);
147
148
// Avoid the overhead of bridge calls if there's no update.
149
// This is an expensive no-op for Android, and causes an unnecessary
@@ -179,7 +181,7 @@ export function createInstance(
181
const tag = nextReactTag;
182
nextReactTag += 2;
183
182
- const viewConfig = ReactNativeViewConfigRegistry.get(type);
184
+ const viewConfig = getViewConfigForType(type);
185
186
if (__DEV__) {
187
for (const key in viewConfig.validAttributes) {
@@ -194,10 +196,7 @@ export function createInstance(
196
'Nesting of <View> within <Text> is not currently supported.',
197
);
198
197
- const updatePayload = ReactNativeAttributePayload.create(
198
- props,
199
- viewConfig.validAttributes,
200
- );
199
+ const updatePayload = create(props, viewConfig.validAttributes);
200
201
const node = createNode(
202
tag, // reactTag
@@ -295,11 +294,7 @@ export function prepareUpdate(
294
hostContext: HostContext,
295
): null | Object {
296
const viewConfig = instance.canonical.viewConfig;
298
- const updatePayload = ReactNativeAttributePayload.diff(
299
- oldProps,
300
- newProps,
301
- viewConfig.validAttributes,
302
- );
297
+ const updatePayload = diff(oldProps, newProps, viewConfig.validAttributes);
298
// TODO: If the event handlers have changed, we need to update the current props
299
// in the commit phase but there is no host config hook to do it yet.
300
// So instead we hack it by updating it in the render phase.
@@ -327,12 +322,10 @@ export function shouldSetTextContent(type: string, props: Props): boolean {
322
323
// The Fabric renderer is secondary to the existing React Native renderer.
324
export const isPrimaryRenderer = false;
330
-export const now = ReactNativeFrameScheduling.now;
331
-export const scheduleDeferredCallback =
332
- ReactNativeFrameScheduling.scheduleDeferredCallback;
333
-export const cancelDeferredCallback =
334
- ReactNativeFrameScheduling.cancelDeferredCallback;
335
-export const shouldYield = ReactNativeFrameScheduling.shouldYield;
325
+export const now = ReactNativeFrameSchedulingNow;
326
+export const scheduleDeferredCallback = ReactNativeFrameSchedulingScheduleDeferredCallback;
327
+export const cancelDeferredCallback = ReactNativeFrameSchedulingCancelDeferredCallback;
328
+export const shouldYield = ReactNativeFrameSchedulingShouldYield;
329
330
export const scheduleTimeout = setTimeout;
331
export const cancelTimeout = clearTimeout;
@@ -383,7 +376,7 @@ export function cloneHiddenInstance(
376
): Instance {
377
const viewConfig = instance.canonical.viewConfig;
378
const node = instance.node;
386
- const updatePayload = ReactNativeAttributePayload.create(
379
+ const updatePayload = create(
380
{style: {display: 'none'}},
381
viewConfig.validAttributes,
382
);
@@ -401,7 +394,7 @@ export function cloneUnhiddenInstance(
394
): Instance {
395
const viewConfig = instance.canonical.viewConfig;
396
const node = instance.node;
404
- const updatePayload = ReactNativeAttributePayload.diff(
397
+ const updatePayload = diff(
398
{...props, style: [props.style, {display: 'none'}]},
399
props,
400
viewConfig.validAttributes,
packages/react-native-renderer/src/ReactFabricInjection.js
+10
-6
@@ -9,15 +9,19 @@
9
10
import './ReactNativeInjectionShared';
11
12
-import * as ReactFabricComponentTree from './ReactFabricComponentTree';
13
-import * as EventPluginUtils from 'events/EventPluginUtils';
12
+import {
13
+ getFiberCurrentPropsFromNode,
14
+ getInstanceFromNode,
15
+ getNodeFromInstance,
16
+} from './ReactFabricComponentTree';
17
+import {setComponentTree} from 'events/EventPluginUtils';
18
import ReactFabricGlobalResponderHandler from './ReactFabricGlobalResponderHandler';
19
import ResponderEventPlugin from 'events/ResponderEventPlugin';
20
17
-EventPluginUtils.setComponentTree(
18
- ReactFabricComponentTree.getFiberCurrentPropsFromNode,
19
- ReactFabricComponentTree.getInstanceFromNode,
20
- ReactFabricComponentTree.getNodeFromInstance,
21
+setComponentTree(
22
+ getFiberCurrentPropsFromNode,
23
+ getInstanceFromNode,
24
+ getNodeFromInstance,
25
);
26
27
ResponderEventPlugin.injection.injectGlobalResponderHandler(
packages/react-native-renderer/src/ReactNativeBridgeEventPlugin.js
+4
-6
@@ -13,15 +13,13 @@ import {
13
accumulateDirectDispatches,
14
} from 'events/EventPropagators';
15
import type {TopLevelType} from 'events/TopLevelEventTypes';
16
-import * as ReactNativeViewConfigRegistry from 'ReactNativeViewConfigRegistry';
17
-import SyntheticEvent from 'events/SyntheticEvent';
18
-import invariant from 'shared/invariant';
19
-
20
-const {
16
+import {
17
customBubblingEventTypes,
18
customDirectEventTypes,
19
eventTypes,
24
-} = ReactNativeViewConfigRegistry;
20
+} from 'ReactNativeViewConfigRegistry';
21
+import SyntheticEvent from 'events/SyntheticEvent';
22
+import invariant from 'shared/invariant';
23
24
const ReactNativeBridgeEventPlugin = {
25
eventTypes: eventTypes,
packages/react-native-renderer/src/ReactNativeComponent.js
+2
-5
@@ -21,7 +21,7 @@ import React from 'react';
21
import TextInputState from 'TextInputState';
22
import UIManager from 'UIManager';
23
24
-import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
24
+import {create} from './ReactNativeAttributePayload';
25
import {mountSafeCallback_NOT_REALLY_SAFE} from './NativeMethodsMixinUtils';
26
27
export default function(
@@ -156,10 +156,7 @@ export default function(
156
const viewConfig: ReactNativeBaseComponentViewConfig<> =
157
maybeInstance.viewConfig || maybeInstance.canonical.viewConfig;
158
159
- const updatePayload = ReactNativeAttributePayload.create(
160
- nativeProps,
161
- viewConfig.validAttributes,
162
- );
159
+ const updatePayload = create(nativeProps, viewConfig.validAttributes);
160
161
// Avoid the overhead of bridge calls if there's no update.
162
// This is an expensive no-op for Android, and causes an unnecessary
packages/react-native-renderer/src/ReactNativeEventEmitter.js
+1
-1
@@ -87,7 +87,7 @@ const removeTouchesAtIndices = function(
87
* @param {TopLevelType} topLevelType Top level type of event.
88
* @param {?object} nativeEventParam Object passed from native.
89
*/
90
-export function _receiveRootNodeIDEvent(
90
+function _receiveRootNodeIDEvent(
91
rootNodeID: number,
92
topLevelType: TopLevelType,
93
nativeEventParam: ?AnyNativeEvent,
packages/react-native-renderer/src/ReactNativeFiberHostComponent.js
+2
-5
@@ -20,7 +20,7 @@ import type {Instance} from './ReactNativeHostConfig';
20
import TextInputState from 'TextInputState';
21
import UIManager from 'UIManager';
22
23
-import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
23
+import {create} from './ReactNativeAttributePayload';
24
import {
25
mountSafeCallback_NOT_REALLY_SAFE,
26
warnForStyleProps,
@@ -84,10 +84,7 @@ class ReactNativeFiberHostComponent {
84
warnForStyleProps(nativeProps, this.viewConfig.validAttributes);
85
}
86
87
- const updatePayload = ReactNativeAttributePayload.create(
88
- nativeProps,
89
- this.viewConfig.validAttributes,
90
- );
87
+ const updatePayload = create(nativeProps, this.viewConfig.validAttributes);
88
89
// Avoid the overhead of bridge calls if there's no update.
90
// This is an expensive no-op for Android, and causes an unnecessary
packages/react-native-renderer/src/ReactNativeHostConfig.js
+17
-21
@@ -15,15 +15,20 @@ import invariant from 'shared/invariant';
15
import UIManager from 'UIManager';
16
import deepFreezeAndThrowOnMutationInDev from 'deepFreezeAndThrowOnMutationInDev';
17
18
-import * as ReactNativeViewConfigRegistry from 'ReactNativeViewConfigRegistry';
19
-import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
18
+import {get as getViewConfigForType} from 'ReactNativeViewConfigRegistry';
19
+import {create, diff} from './ReactNativeAttributePayload';
20
import {
21
precacheFiberNode,
22
uncacheFiberNode,
23
updateFiberProps,
24
} from './ReactNativeComponentTree';
25
import ReactNativeFiberHostComponent from './ReactNativeFiberHostComponent';
26
-import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
26
+import {
27
+ now as ReactNativeFrameSchedulingNow,
28
+ cancelDeferredCallback as ReactNativeFrameSchedulingCancelDeferredCallback,
29
+ scheduleDeferredCallback as ReactNativeFrameSchedulingScheduleDeferredCallback,
30
+ shouldYield as ReactNativeFrameSchedulingShouldYield,
31
+} from './ReactNativeFrameScheduling';
32
33
export type Type = string;
34
export type Props = Object;
@@ -92,7 +97,7 @@ export function createInstance(
97
internalInstanceHandle: Object,
98
): Instance {
99
const tag = allocateTag();
95
- const viewConfig = ReactNativeViewConfigRegistry.get(type);
100
+ const viewConfig = getViewConfigForType(type);
101
102
if (__DEV__) {
103
for (const key in viewConfig.validAttributes) {
@@ -107,10 +112,7 @@ export function createInstance(
112
'Nesting of <View> within <Text> is not currently supported.',
113
);
114
110
- const updatePayload = ReactNativeAttributePayload.create(
111
- props,
112
- viewConfig.validAttributes,
113
- );
115
+ const updatePayload = create(props, viewConfig.validAttributes);
116
117
UIManager.createView(
118
tag, // reactTag
@@ -232,13 +234,11 @@ export function resetAfterCommit(containerInfo: Container): void {
234
// Noop
235
}
236
235
-export const now = ReactNativeFrameScheduling.now;
237
+export const now = ReactNativeFrameSchedulingNow;
238
export const isPrimaryRenderer = true;
237
-export const scheduleDeferredCallback =
238
- ReactNativeFrameScheduling.scheduleDeferredCallback;
239
-export const cancelDeferredCallback =
240
- ReactNativeFrameScheduling.cancelDeferredCallback;
241
-export const shouldYield = ReactNativeFrameScheduling.shouldYield;
239
+export const scheduleDeferredCallback = ReactNativeFrameSchedulingScheduleDeferredCallback;
240
+export const cancelDeferredCallback = ReactNativeFrameSchedulingCancelDeferredCallback;
241
+export const shouldYield = ReactNativeFrameSchedulingShouldYield;
242
243
export const scheduleTimeout = setTimeout;
244
export const cancelTimeout = clearTimeout;
@@ -342,11 +342,7 @@ export function commitUpdate(
342
343
updateFiberProps(instance._nativeTag, newProps);
344
345
- const updatePayload = ReactNativeAttributePayload.diff(
346
- oldProps,
347
- newProps,
348
- viewConfig.validAttributes,
349
- );
345
+ const updatePayload = diff(oldProps, newProps, viewConfig.validAttributes);
346
347
// Avoid the overhead of bridge calls if there's no update.
348
// This is an expensive no-op for Android, and causes an unnecessary
@@ -455,7 +451,7 @@ export function resetTextContent(instance: Instance): void {
451
452
export function hideInstance(instance: Instance): void {
453
const viewConfig = instance.viewConfig;
458
- const updatePayload = ReactNativeAttributePayload.create(
454
+ const updatePayload = create(
455
{style: {display: 'none'}},
456
viewConfig.validAttributes,
457
);
@@ -472,7 +468,7 @@ export function hideTextInstance(textInstance: TextInstance): void {
468
469
export function unhideInstance(instance: Instance, props: Props): void {
470
const viewConfig = instance.viewConfig;
475
- const updatePayload = ReactNativeAttributePayload.diff(
471
+ const updatePayload = diff(
472
{...props, style: [props.style, {display: 'none'}]},
473
props,
474
viewConfig.validAttributes,
packages/react-native-renderer/src/ReactNativeInjection.js
+15
-8
@@ -9,9 +9,13 @@
9
10
import './ReactNativeInjectionShared';
11
12
-import * as ReactNativeComponentTree from './ReactNativeComponentTree';
13
-import * as EventPluginUtils from 'events/EventPluginUtils';
14
-import * as ReactNativeEventEmitter from './ReactNativeEventEmitter';
12
+import {
13
+ getFiberCurrentPropsFromNode,
14
+ getInstanceFromNode,
15
+ getNodeFromInstance,
16
+} from './ReactNativeComponentTree';
17
+import {setComponentTree} from 'events/EventPluginUtils';
18
+import {receiveEvent, receiveTouches} from './ReactNativeEventEmitter';
19
import ReactNativeGlobalResponderHandler from './ReactNativeGlobalResponderHandler';
20
import ResponderEventPlugin from 'events/ResponderEventPlugin';
21
@@ -21,12 +25,15 @@ import RCTEventEmitter from 'RCTEventEmitter';
25
/**
26
* Register the event emitter with the native bridge
27
*/
24
-RCTEventEmitter.register(ReactNativeEventEmitter);
28
+RCTEventEmitter.register({
29
+ receiveEvent,
30
+ receiveTouches,
31
+});
32
26
-EventPluginUtils.setComponentTree(
27
- ReactNativeComponentTree.getFiberCurrentPropsFromNode,
28
- ReactNativeComponentTree.getInstanceFromNode,
29
- ReactNativeComponentTree.getNodeFromInstance,
33
+setComponentTree(
34
+ getFiberCurrentPropsFromNode,
35
+ getInstanceFromNode,
36
+ getNodeFromInstance,
37
);
38
39
ResponderEventPlugin.injection.injectGlobalResponderHandler(
packages/react-native-renderer/src/ReactNativeInjectionShared.js
+3
-3
@@ -16,7 +16,7 @@
16
// Module provided by RN:
17
import 'InitializeCore';
18
19
-import * as EventPluginHub from 'events/EventPluginHub';
19
+import {injection as EventPluginHubInjection} from 'events/EventPluginHub';
20
import ResponderEventPlugin from 'events/ResponderEventPlugin';
21
22
import ReactNativeBridgeEventPlugin from './ReactNativeBridgeEventPlugin';
@@ -25,13 +25,13 @@ import ReactNativeEventPluginOrder from './ReactNativeEventPluginOrder';
25
/**
26
* Inject module for resolving DOM hierarchy and plugin ordering.
27
*/
28
-EventPluginHub.injection.injectEventPluginOrder(ReactNativeEventPluginOrder);
28
+EventPluginHubInjection.injectEventPluginOrder(ReactNativeEventPluginOrder);
29
30
/**
31
* Some important event plugins included by default (without having to require
32
* them).
33
*/
34
-EventPluginHub.injection.injectEventPluginsByName({
34
+EventPluginHubInjection.injectEventPluginsByName({
35
ResponderEventPlugin: ResponderEventPlugin,
36
ReactNativeBridgeEventPlugin: ReactNativeBridgeEventPlugin,
37
});
packages/react-native-renderer/src/ReactNativeRenderer.js
+30
-24
@@ -12,18 +12,31 @@ import type {ReactNodeList} from 'shared/ReactTypes';
12
13
import './ReactNativeInjection';
14
15
-import * as ReactNativeFiberRenderer from 'react-reconciler/inline.native';
15
+import {
16
+ findHostInstance,
17
+ findHostInstanceWithWarning,
18
+ batchedUpdates as batchedUpdatesImpl,
19
+ interactiveUpdates,
20
+ flushInteractiveUpdates,
21
+ createContainer,
22
+ updateContainer,
23
+ injectIntoDevTools,
24
+ getPublicRootInstance,
25
+} from 'react-reconciler/inline.native';
26
// TODO: direct imports like some-package/src/* are bad. Fix me.
27
import {getStackByFiberInDevAndProd} from 'react-reconciler/src/ReactCurrentFiber';
18
-import * as ReactPortal from 'shared/ReactPortal';
19
-import * as ReactGenericBatching from 'events/ReactGenericBatching';
28
+import {createPortal} from 'shared/ReactPortal';
29
+import {
30
+ setBatchingImplementation,
31
+ batchedUpdates,
32
+} from 'events/ReactGenericBatching';
33
import ReactVersion from 'shared/ReactVersion';
34
// Module provided by RN:
35
import UIManager from 'UIManager';
36
37
import NativeMethodsMixin from './NativeMethodsMixin';
38
import ReactNativeComponent from './ReactNativeComponent';
26
-import * as ReactNativeComponentTree from './ReactNativeComponentTree';
39
+import {getClosestInstanceFromNode} from './ReactNativeComponentTree';
40
import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
41
42
import ReactSharedInternals from 'shared/ReactSharedInternals';
@@ -31,9 +44,6 @@ import getComponentName from 'shared/getComponentName';
44
import warningWithoutStack from 'shared/warningWithoutStack';
45
46
const ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
34
-const findHostInstance = ReactNativeFiberRenderer.findHostInstance;
35
-const findHostInstanceWithWarning =
36
- ReactNativeFiberRenderer.findHostInstanceWithWarning;
47
48
function findNodeHandle(componentOrHandle: any): ?number {
49
if (__DEV__) {
@@ -85,14 +95,14 @@ function findNodeHandle(componentOrHandle: any): ?number {
95
return hostInstance._nativeTag;
96
}
97
88
-ReactGenericBatching.setBatchingImplementation(
89
- ReactNativeFiberRenderer.batchedUpdates,
90
- ReactNativeFiberRenderer.interactiveUpdates,
91
- ReactNativeFiberRenderer.flushInteractiveUpdates,
98
+setBatchingImplementation(
99
+ batchedUpdatesImpl,
100
+ interactiveUpdates,
101
+ flushInteractiveUpdates,
102
);
103
104
function computeComponentStackForErrorReporting(reactTag: number): string {
95
- let fiber = ReactNativeComponentTree.getClosestInstanceFromNode(reactTag);
105
+ let fiber = getClosestInstanceFromNode(reactTag);
106
if (!fiber) {
107
return '';
108
}
@@ -112,23 +122,19 @@ const ReactNativeRenderer: ReactNativeType = {
122
if (!root) {
123
// TODO (bvaughn): If we decide to keep the wrapper component,
124
// We could create a wrapper for containerTag as well to reduce special casing.
115
- root = ReactNativeFiberRenderer.createContainer(
116
- containerTag,
117
- false,
118
- false,
119
- );
125
+ root = createContainer(containerTag, false, false);
126
roots.set(containerTag, root);
127
}
122
- ReactNativeFiberRenderer.updateContainer(element, root, null, callback);
128
+ updateContainer(element, root, null, callback);
129
124
- return ReactNativeFiberRenderer.getPublicRootInstance(root);
130
+ return getPublicRootInstance(root);
131
},
132
133
unmountComponentAtNode(containerTag: number) {
134
const root = roots.get(containerTag);
135
if (root) {
136
// TODO: Is it safe to reset this now or should I wait since this unmount could be deferred?
131
- ReactNativeFiberRenderer.updateContainer(null, root, null, () => {
137
+ updateContainer(null, root, null, () => {
138
roots.delete(containerTag);
139
});
140
}
@@ -146,10 +152,10 @@ const ReactNativeRenderer: ReactNativeType = {
152
containerTag: number,
153
key: ?string = null,
154
) {
149
- return ReactPortal.createPortal(children, containerTag, null, key);
155
+ return createPortal(children, containerTag, null, key);
156
},
157
152
- unstable_batchedUpdates: ReactGenericBatching.batchedUpdates,
158
+ unstable_batchedUpdates: batchedUpdates,
159
160
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
161
// Used as a mixin in many createClass-based components
@@ -158,8 +164,8 @@ const ReactNativeRenderer: ReactNativeType = {
164
},
165
};
166
161
-ReactNativeFiberRenderer.injectIntoDevTools({
162
- findFiberByHostInstance: ReactNativeComponentTree.getClosestInstanceFromNode,
167
+injectIntoDevTools({
168
+ findFiberByHostInstance: getClosestInstanceFromNode,
169
getInspectorDataForViewTag: getInspectorDataForViewTag,
170
bundleType: __DEV__ ? 1 : 0,
171
version: ReactVersion,
packages/react-noop-renderer/src/createReactNoop.js
+2
-2
@@ -18,7 +18,7 @@ import type {Fiber} from 'react-reconciler/src/ReactFiber';
18
import type {UpdateQueue} from 'react-reconciler/src/ReactUpdateQueue';
19
import type {ReactNodeList} from 'shared/ReactTypes';
20
21
-import * as ReactPortal from 'shared/ReactPortal';
21
+import {createPortal} from 'shared/ReactPortal';
22
import expect from 'expect';
23
import {REACT_FRAGMENT_TYPE, REACT_ELEMENT_TYPE} from 'shared/ReactSymbols';
24
@@ -656,7 +656,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
656
container: Container,
657
key: ?string = null,
658
) {
659
- return ReactPortal.createPortal(children, container, null, key);
659
+ return createPortal(children, container, null, key);
660
},
661
662
// Shortcut for testing a single root
packages/react-reconciler/src/ReactFiberBeginWork.js
+15
-11
@@ -56,7 +56,11 @@ import getComponentName from 'shared/getComponentName';
56
import ReactStrictModeWarnings from './ReactStrictModeWarnings';
57
import warning from 'shared/warning';
58
import warningWithoutStack from 'shared/warningWithoutStack';
59
-import * as ReactCurrentFiber from './ReactCurrentFiber';
59
+import {
60
+ setCurrentPhase,
61
+ getCurrentFiberOwnerNameInDevOrNull,
62
+ getCurrentFiberStackInDev,
63
+} from './ReactCurrentFiber';
64
import {startWorkTimer, cancelWorkTimer} from './ReactDebugFiberPerf';
65
66
import {
@@ -215,9 +219,9 @@ function updateForwardRef(
219
prepareToUseHooks(current, workInProgress, renderExpirationTime);
220
if (__DEV__) {
221
ReactCurrentOwner.current = workInProgress;
218
- ReactCurrentFiber.setCurrentPhase('render');
222
+ setCurrentPhase('render');
223
nextChildren = render(nextProps, ref);
220
- ReactCurrentFiber.setCurrentPhase(null);
224
+ setCurrentPhase(null);
225
} else {
226
nextChildren = render(nextProps, ref);
227
}
@@ -409,9 +413,9 @@ function updateFunctionComponent(
413
prepareToUseHooks(current, workInProgress, renderExpirationTime);
414
if (__DEV__) {
415
ReactCurrentOwner.current = workInProgress;
412
- ReactCurrentFiber.setCurrentPhase('render');
416
+ setCurrentPhase('render');
417
nextChildren = Component(nextProps, context);
414
- ReactCurrentFiber.setCurrentPhase(null);
418
+ setCurrentPhase(null);
419
} else {
420
nextChildren = Component(nextProps, context);
421
}
@@ -548,7 +552,7 @@ function finishClassComponent(
552
}
553
} else {
554
if (__DEV__) {
551
- ReactCurrentFiber.setCurrentPhase('render');
555
+ setCurrentPhase('render');
556
nextChildren = instance.render();
557
if (
558
debugRenderPhaseSideEffects ||
@@ -557,7 +561,7 @@ function finishClassComponent(
561
) {
562
instance.render();
563
}
560
- ReactCurrentFiber.setCurrentPhase(null);
564
+ setCurrentPhase(null);
565
} else {
566
nextChildren = instance.render();
567
}
@@ -1011,7 +1015,7 @@ function validateFunctionComponentInDev(workInProgress: Fiber, Component: any) {
1015
}
1016
if (workInProgress.ref !== null) {
1017
let info = '';
1014
- const ownerName = ReactCurrentFiber.getCurrentFiberOwnerNameInDevOrNull();
1018
+ const ownerName = getCurrentFiberOwnerNameInDevOrNull();
1019
if (ownerName) {
1020
info += '\n\nCheck the render method of `' + ownerName + '`.';
1021
}
@@ -1378,7 +1382,7 @@ function updateContextProvider(
1382
newProps,
1383
'prop',
1384
'Context.Provider',
1381
- ReactCurrentFiber.getCurrentFiberStackInDev,
1385
+ getCurrentFiberStackInDev,
1386
);
1387
}
1388
}
@@ -1469,9 +1473,9 @@ function updateContextConsumer(
1473
let newChildren;
1474
if (__DEV__) {
1475
ReactCurrentOwner.current = workInProgress;
1472
- ReactCurrentFiber.setCurrentPhase('render');
1476
+ setCurrentPhase('render');
1477
newChildren = render(newValue);
1474
- ReactCurrentFiber.setCurrentPhase(null);
1478
+ setCurrentPhase(null);
1479
} else {
1480
newChildren = render(newValue);
1481
}
packages/react-reconciler/src/ReactFiberClassComponent.js
+5
-5
@@ -19,7 +19,7 @@ import {
19
} from 'shared/ReactFeatureFlags';
20
import ReactStrictModeWarnings from './ReactStrictModeWarnings';
21
import {isMounted} from 'react-reconciler/reflection';
22
-import * as ReactInstanceMap from 'shared/ReactInstanceMap';
22
+import {get as getInstance, set as setInstance} from 'shared/ReactInstanceMap';
23
import ReactSharedInternals from 'shared/ReactSharedInternals';
24
import shallowEqual from 'shared/shallowEqual';
25
import getComponentName from 'shared/getComponentName';
@@ -188,7 +188,7 @@ export function applyDerivedStateFromProps(
188
const classComponentUpdater = {
189
isMounted,
190
enqueueSetState(inst, payload, callback) {
191
- const fiber = ReactInstanceMap.get(inst);
191
+ const fiber = getInstance(inst);
192
const currentTime = requestCurrentTime();
193
const expirationTime = computeExpirationForFiber(currentTime, fiber);
194
@@ -206,7 +206,7 @@ const classComponentUpdater = {
206
scheduleWork(fiber, expirationTime);
207
},
208
enqueueReplaceState(inst, payload, callback) {
209
- const fiber = ReactInstanceMap.get(inst);
209
+ const fiber = getInstance(inst);
210
const currentTime = requestCurrentTime();
211
const expirationTime = computeExpirationForFiber(currentTime, fiber);
212
@@ -226,7 +226,7 @@ const classComponentUpdater = {
226
scheduleWork(fiber, expirationTime);
227
},
228
enqueueForceUpdate(inst, callback) {
229
- const fiber = ReactInstanceMap.get(inst);
229
+ const fiber = getInstance(inst);
230
const currentTime = requestCurrentTime();
231
const expirationTime = computeExpirationForFiber(currentTime, fiber);
232
@@ -504,7 +504,7 @@ function adoptClassInstance(workInProgress: Fiber, instance: any): void {
504
instance.updater = classComponentUpdater;
505
workInProgress.stateNode = instance;
506
// The instance needs access to the fiber so that it can schedule updates
507
- ReactInstanceMap.set(instance, workInProgress);
507
+ setInstance(instance, workInProgress);
508
if (__DEV__) {
509
instance._reactInternalInstance = fakeInternalInstance;
510
}
packages/react-reconciler/src/ReactFiberContext.js
+5
-5
@@ -17,7 +17,7 @@ import invariant from 'shared/invariant';
17
import warningWithoutStack from 'shared/warningWithoutStack';
18
import checkPropTypes from 'prop-types/checkPropTypes';
19
20
-import * as ReactCurrentFiber from './ReactCurrentFiber';
20
+import {setCurrentPhase, getCurrentFiberStackInDev} from './ReactCurrentFiber';
21
import {startPhaseTimer, stopPhaseTimer} from './ReactDebugFiberPerf';
22
import {createCursor, push, pop} from './ReactFiberStack';
23
@@ -99,7 +99,7 @@ function getMaskedContext(
99
context,
100
'context',
101
name,
102
- ReactCurrentFiber.getCurrentFiberStackInDev,
102
+ getCurrentFiberStackInDev,
103
);
104
}
105
@@ -177,13 +177,13 @@ function processChildContext(
177
178
let childContext;
179
if (__DEV__) {
180
- ReactCurrentFiber.setCurrentPhase('getChildContext');
180
+ setCurrentPhase('getChildContext');
181
}
182
startPhaseTimer(fiber, 'getChildContext');
183
childContext = instance.getChildContext();
184
stopPhaseTimer();
185
if (__DEV__) {
186
- ReactCurrentFiber.setCurrentPhase(null);
186
+ setCurrentPhase(null);
187
}
188
for (let contextKey in childContext) {
189
invariant(
@@ -205,7 +205,7 @@ function processChildContext(
205
// context from the parent component instance. The stack will be missing
206
// because it's outside of the reconciliation, and so the pointer has not
207
// been set. This is rare and doesn't matter. We'll also remove that API.
208
- ReactCurrentFiber.getCurrentFiberStackInDev,
208
+ getCurrentFiberStackInDev,
209
);
210
}
211
packages/react-reconciler/src/ReactFiberReconciler.js
+14
-11
@@ -22,7 +22,7 @@ import {
22
findCurrentHostFiber,
23
findCurrentHostFiberWithNoPortals,
24
} from 'react-reconciler/reflection';
25
-import * as ReactInstanceMap from 'shared/ReactInstanceMap';
25
+import {get as getInstance} from 'shared/ReactInstanceMap';
26
import {HostComponent, ClassComponent} from 'shared/ReactWorkTags';
27
import getComponentName from 'shared/getComponentName';
28
import invariant from 'shared/invariant';
@@ -36,7 +36,7 @@ import {
36
isContextProvider as isLegacyContextProvider,
37
} from './ReactFiberContext';
38
import {createFiberRoot} from './ReactFiberRoot';
39
-import * as ReactFiberDevToolsHook from './ReactFiberDevToolsHook';
39
+import {injectInternals} from './ReactFiberDevToolsHook';
40
import {
41
computeUniqueAsyncExpiration,
42
requestCurrentTime,
@@ -56,8 +56,11 @@ import {
56
} from './ReactFiberScheduler';
57
import {createUpdate, enqueueUpdate} from './ReactUpdateQueue';
58
import ReactFiberInstrumentation from './ReactFiberInstrumentation';
59
-import * as ReactCurrentFiber from './ReactCurrentFiber';
60
-import {getStackByFiberInDevAndProd} from './ReactCurrentFiber';
59
+import {
60
+ getStackByFiberInDevAndProd,
61
+ phase as ReactCurrentFiberPhase,
62
+ current as ReactCurrentFiberCurrent,
63
+} from './ReactCurrentFiber';
64
import {StrictMode} from './ReactTypeOfMode';
65
66
type OpaqueRoot = FiberRoot;
@@ -94,7 +97,7 @@ function getContextForSubtree(
97
return emptyContextObject;
98
}
99
97
- const fiber = ReactInstanceMap.get(parentComponent);
100
+ const fiber = getInstance(parentComponent);
101
const parentContext = findCurrentUnmaskedContext(fiber);
102
103
if (fiber.tag === ClassComponent) {
@@ -115,8 +118,8 @@ function scheduleRootUpdate(
118
) {
119
if (__DEV__) {
120
if (
118
- ReactCurrentFiber.phase === 'render' &&
119
- ReactCurrentFiber.current !== null &&
121
+ ReactCurrentFiberPhase === 'render' &&
122
+ ReactCurrentFiberCurrent !== null &&
123
!didWarnAboutNestedUpdates
124
) {
125
didWarnAboutNestedUpdates = true;
@@ -126,7 +129,7 @@ function scheduleRootUpdate(
129
'triggering nested component updates from render is not allowed. ' +
130
'If necessary, trigger nested updates in componentDidUpdate.\n\n' +
131
'Check the render method of %s.',
129
- getComponentName(ReactCurrentFiber.current.type) || 'Unknown',
132
+ getComponentName(ReactCurrentFiberCurrent.type) || 'Unknown',
133
);
134
}
135
}
@@ -187,7 +190,7 @@ export function updateContainerAtExpirationTime(
190
}
191
192
function findHostInstance(component: Object): PublicInstance | null {
190
- const fiber = ReactInstanceMap.get(component);
193
+ const fiber = getInstance(component);
194
if (fiber === undefined) {
195
if (typeof component.render === 'function') {
196
invariant(false, 'Unable to find node on an unmounted component.');
@@ -211,7 +214,7 @@ function findHostInstanceWithWarning(
214
methodName: string,
215
): PublicInstance | null {
216
if (__DEV__) {
214
- const fiber = ReactInstanceMap.get(component);
217
+ const fiber = getInstance(component);
218
if (fiber === undefined) {
219
if (typeof component.render === 'function') {
220
invariant(false, 'Unable to find node on an unmounted component.');
@@ -338,7 +341,7 @@ export function findHostInstanceWithNoPortals(
341
342
export function injectIntoDevTools(devToolsConfig: DevToolsConfig): boolean {
343
const {findFiberByHostInstance} = devToolsConfig;
341
- return ReactFiberDevToolsHook.injectInternals({
344
+ return injectInternals({
345
...devToolsConfig,
346
findHostInstanceByFiber(fiber: Fiber): Instance | TextInstance | null {
347
const hostFiber = findCurrentHostFiber(fiber);
packages/react-reconciler/src/ReactFiberScheduler.js
+17
-12
@@ -68,7 +68,12 @@ import invariant from 'shared/invariant';
68
import warningWithoutStack from 'shared/warningWithoutStack';
69
70
import ReactFiberInstrumentation from './ReactFiberInstrumentation';
71
-import * as ReactCurrentFiber from './ReactCurrentFiber';
71
+import {
72
+ getStackByFiberInDevAndProd,
73
+ phase as ReactCurrentFiberPhase,
74
+ resetCurrentFiber,
75
+ setCurrentFiber,
76
+} from './ReactCurrentFiber';
77
import {
78
now,
79
scheduleDeferredCallback,
@@ -210,13 +215,13 @@ if (__DEV__) {
215
isClass
216
? 'the componentWillUnmount method'
217
: 'a useEffect cleanup function',
213
- ReactCurrentFiber.getStackByFiberInDevAndProd(fiber),
218
+ getStackByFiberInDevAndProd(fiber),
219
);
220
didWarnStateUpdateForUnmountedComponent[componentName] = true;
221
};
222
223
warnAboutInvalidUpdates = function(instance: React$Component<any>) {
219
- switch (ReactCurrentFiber.phase) {
224
+ switch (ReactCurrentFiberPhase) {
225
case 'getChildContext':
226
if (didWarnSetStateChildContext) {
227
return;
@@ -392,7 +397,7 @@ function resetStack() {
397
function commitAllHostEffects() {
398
while (nextEffect !== null) {
399
if (__DEV__) {
395
- ReactCurrentFiber.setCurrentFiber(nextEffect);
400
+ setCurrentFiber(nextEffect);
401
}
402
recordEffect();
403
@@ -451,14 +456,14 @@ function commitAllHostEffects() {
456
}
457
458
if (__DEV__) {
454
- ReactCurrentFiber.resetCurrentFiber();
459
+ resetCurrentFiber();
460
}
461
}
462
463
function commitBeforeMutationLifecycles() {
464
while (nextEffect !== null) {
465
if (__DEV__) {
461
- ReactCurrentFiber.setCurrentFiber(nextEffect);
466
+ setCurrentFiber(nextEffect);
467
}
468
469
const effectTag = nextEffect.effectTag;
@@ -472,7 +477,7 @@ function commitBeforeMutationLifecycles() {
477
}
478
479
if (__DEV__) {
475
- ReactCurrentFiber.resetCurrentFiber();
480
+ resetCurrentFiber();
481
}
482
}
483
@@ -947,7 +952,7 @@ function completeUnitOfWork(workInProgress: Fiber): Fiber | null {
952
// progress.
953
const current = workInProgress.alternate;
954
if (__DEV__) {
950
- ReactCurrentFiber.setCurrentFiber(workInProgress);
955
+ setCurrentFiber(workInProgress);
956
}
957
958
const returnFiber = workInProgress.return;
@@ -988,7 +993,7 @@ function completeUnitOfWork(workInProgress: Fiber): Fiber | null {
993
stopWorkTimer(workInProgress);
994
resetChildExpirationTime(workInProgress, nextRenderExpirationTime);
995
if (__DEV__) {
991
- ReactCurrentFiber.resetCurrentFiber();
996
+ resetCurrentFiber();
997
}
998
999
if (nextUnitOfWork !== null) {
@@ -1076,7 +1081,7 @@ function completeUnitOfWork(workInProgress: Fiber): Fiber | null {
1081
}
1082
1083
if (__DEV__) {
1079
- ReactCurrentFiber.resetCurrentFiber();
1084
+ resetCurrentFiber();
1085
}
1086
1087
if (next !== null) {
@@ -1132,7 +1137,7 @@ function performUnitOfWork(workInProgress: Fiber): Fiber | null {
1137
// See if beginning this work spawns more work.
1138
startWorkTimer(workInProgress);
1139
if (__DEV__) {
1135
- ReactCurrentFiber.setCurrentFiber(workInProgress);
1140
+ setCurrentFiber(workInProgress);
1141
}
1142
1143
if (__DEV__ && replayFailedUnitOfWorkWithInvokeGuardedCallback) {
@@ -1161,7 +1166,7 @@ function performUnitOfWork(workInProgress: Fiber): Fiber | null {
1166
}
1167
1168
if (__DEV__) {
1164
- ReactCurrentFiber.resetCurrentFiber();
1169
+ resetCurrentFiber();
1170
if (isReplayingFailedUnitOfWork) {
1171
// Currently replaying a failed unit of work. This should be unreachable,
1172
// because the render phase is meant to be idempotent, and it should
packages/react-reconciler/src/ReactFiberTreeReflection.js
+2
-2
@@ -12,7 +12,7 @@ import type {Fiber} from './ReactFiber';
12
import invariant from 'shared/invariant';
13
import warningWithoutStack from 'shared/warningWithoutStack';
14
15
-import * as ReactInstanceMap from 'shared/ReactInstanceMap';
15
+import {get as getInstance} from 'shared/ReactInstanceMap';
16
import ReactSharedInternals from 'shared/ReactSharedInternals';
17
import getComponentName from 'shared/getComponentName';
18
import {
@@ -82,7 +82,7 @@ export function isMounted(component: React$Component<any, any>): boolean {
82
}
83
}
84
85
- const fiber: ?Fiber = ReactInstanceMap.get(component);
85
+ const fiber: ?Fiber = getInstance(component);
86
if (!fiber) {
87
return false;
88
}
packages/react-test-renderer/src/ReactTestHostConfig.js
+10
-7
@@ -8,7 +8,12 @@
8
*/
9
10
import warning from 'shared/warning';
11
-import * as TestRendererScheduling from './ReactTestRendererScheduling';
11
+import {
12
+ nowImplementation as TestRendererSchedulingNowImplementation,
13
+ scheduleDeferredCallback as TestRendererSchedulingScheduleDeferredCallback,
14
+ cancelDeferredCallback as TestRendererSchedulingCancelDeferredCallback,
15
+ shouldYield as TestRendererSchedulingShouldYield,
16
+} from './ReactTestRendererScheduling';
17
18
export type Type = string;
19
export type Props = Object;
@@ -197,12 +202,10 @@ export function createTextInstance(
202
export const isPrimaryRenderer = false;
203
// This approach enables `now` to be mocked by tests,
204
// Even after the reconciler has initialized and read host config values.
200
-export const now = () => TestRendererScheduling.nowImplementation();
201
-export const scheduleDeferredCallback =
202
- TestRendererScheduling.scheduleDeferredCallback;
203
-export const cancelDeferredCallback =
204
- TestRendererScheduling.cancelDeferredCallback;
205
-export const shouldYield = TestRendererScheduling.shouldYield;
205
+export const now = () => TestRendererSchedulingNowImplementation();
206
+export const scheduleDeferredCallback = TestRendererSchedulingScheduleDeferredCallback;
207
+export const cancelDeferredCallback = TestRendererSchedulingCancelDeferredCallback;
208
+export const shouldYield = TestRendererSchedulingShouldYield;
209
210
export const scheduleTimeout = setTimeout;
211
export const cancelTimeout = clearTimeout;
packages/react-test-renderer/src/ReactTestRenderer.js
+30
-18
@@ -11,7 +11,13 @@ import type {Fiber} from 'react-reconciler/src/ReactFiber';
11
import type {FiberRoot} from 'react-reconciler/src/ReactFiberRoot';
12
import type {Instance, TextInstance} from './ReactTestHostConfig';
13
14
-import * as TestRenderer from 'react-reconciler/inline.test';
14
+import {
15
+ getPublicRootInstance,
16
+ createContainer,
17
+ updateContainer,
18
+ flushSync,
19
+ injectIntoDevTools,
20
+} from 'react-reconciler/inline.test';
21
import {batchedUpdates} from 'events/ReactGenericBatching';
22
import {findCurrentFiberUsingSlowPath} from 'react-reconciler/reflection';
23
import {
@@ -34,8 +40,14 @@ import {
40
import invariant from 'shared/invariant';
41
import ReactVersion from 'shared/ReactVersion';
42
37
-import * as ReactTestHostConfig from './ReactTestHostConfig';
38
-import * as TestRendererScheduling from './ReactTestRendererScheduling';
43
+import {getPublicInstance} from './ReactTestHostConfig';
44
+import {
45
+ flushAll,
46
+ flushNumberOfYields,
47
+ clearYields,
48
+ setNowImplementation,
49
+ yieldValue,
50
+} from './ReactTestRendererScheduling';
51
52
type TestRendererOptions = {
53
createNodeMock: (element: React$Element<any>) => any,
@@ -277,7 +289,7 @@ class ReactTestInstance {
289
290
get instance() {
291
if (this._fiber.tag === HostComponent) {
280
- return ReactTestHostConfig.getPublicInstance(this._fiber.stateNode);
292
+ return getPublicInstance(this._fiber.stateNode);
293
} else {
294
return this._fiber.stateNode;
295
}
@@ -428,13 +440,13 @@ const ReactTestRendererFiber = {
440
createNodeMock,
441
tag: 'CONTAINER',
442
};
431
- let root: FiberRoot | null = TestRenderer.createContainer(
443
+ let root: FiberRoot | null = createContainer(
444
container,
445
isConcurrent,
446
false,
447
);
448
invariant(root != null, 'something went wrong');
437
- TestRenderer.updateContainer(element, root, null, null);
449
+ updateContainer(element, root, null, null);
450
451
const entry = {
452
root: undefined, // makes flow happy
@@ -475,13 +487,13 @@ const ReactTestRendererFiber = {
487
if (root == null || root.current == null) {
488
return;
489
}
478
- TestRenderer.updateContainer(newElement, root, null, null);
490
+ updateContainer(newElement, root, null, null);
491
},
492
unmount() {
493
if (root == null || root.current == null) {
494
return;
495
}
484
- TestRenderer.updateContainer(null, root, null, null);
496
+ updateContainer(null, root, null, null);
497
container = null;
498
root = null;
499
},
@@ -489,16 +501,16 @@ const ReactTestRendererFiber = {
501
if (root == null || root.current == null) {
502
return null;
503
}
492
- return TestRenderer.getPublicRootInstance(root);
504
+ return getPublicRootInstance(root);
505
},
506
495
- unstable_flushAll: TestRendererScheduling.flushAll,
507
+ unstable_flushAll: flushAll,
508
unstable_flushSync<T>(fn: () => T): T {
497
- TestRendererScheduling.clearYields();
498
- return TestRenderer.flushSync(fn);
509
+ clearYields();
510
+ return flushSync(fn);
511
},
500
- unstable_flushNumberOfYields: TestRendererScheduling.flushNumberOfYields,
501
- unstable_clearYields: TestRendererScheduling.clearYields,
512
+ unstable_flushNumberOfYields: flushNumberOfYields,
513
+ unstable_clearYields: clearYields,
514
};
515
516
Object.defineProperty(
@@ -529,14 +541,14 @@ const ReactTestRendererFiber = {
541
return entry;
542
},
543
532
- unstable_yield: TestRendererScheduling.yieldValue,
533
- unstable_clearYields: TestRendererScheduling.clearYields,
544
+ unstable_yield: yieldValue,
545
+ unstable_clearYields: clearYields,
546
547
/* eslint-disable camelcase */
548
unstable_batchedUpdates: batchedUpdates,
549
/* eslint-enable camelcase */
550
539
- unstable_setNowImplementation: TestRendererScheduling.setNowImplementation,
551
+ unstable_setNowImplementation: setNowImplementation,
552
};
553
554
const fiberToWrapper = new WeakMap();
@@ -553,7 +565,7 @@ function wrapFiber(fiber: Fiber): ReactTestInstance {
565
}
566
567
// Enable ReactTestRenderer to be used to test DevTools integration.
556
-TestRenderer.injectIntoDevTools({
568
+injectIntoDevTools({
569
findFiberByHostInstance: (() => {
570
throw new Error('TestRenderer does not support findFiberByHostInstance()');
571
}: any),