Skip to content

Commit 04e7f85

Browse files
committed
Unify ReactFiberCurrentOwner and ReactCurrentFiber
1 parent 6ef0dd4 commit 04e7f85

11 files changed

+46
-58
lines changed

packages/react-dom/src/client/ReactDOMRootFB.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ import {LegacyRoot} from 'react-reconciler/src/ReactRootTags';
6161
import getComponentNameFromType from 'shared/getComponentNameFromType';
6262
import {has as hasInstance} from 'shared/ReactInstanceMap';
6363

64-
import {currentOwner} from 'react-reconciler/src/ReactFiberCurrentOwner';
64+
import {
65+
current as currentOwner,
66+
isRendering,
67+
} from 'react-reconciler/src/ReactCurrentFiber';
6568

6669
import assign from 'shared/assign';
6770

@@ -343,7 +346,7 @@ export function findDOMNode(
343346
): null | Element | Text {
344347
if (__DEV__) {
345348
const owner = currentOwner;
346-
if (owner !== null && owner.stateNode !== null) {
349+
if (owner !== null && isRendering && owner.stateNode !== null) {
347350
const warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;
348351
if (!warnedAboutRefsInRender) {
349352
console.error(

packages/react-native-renderer/src/ReactNativePublicCompat.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@ import {
2525
} from 'react-reconciler/src/ReactFiberReconciler';
2626
import {doesFiberContain} from 'react-reconciler/src/ReactFiberTreeReflection';
2727
import getComponentNameFromType from 'shared/getComponentNameFromType';
28-
import {currentOwner} from 'react-reconciler/src/ReactFiberCurrentOwner';
28+
import {
29+
current as currentOwner,
30+
isRendering,
31+
} from 'react-reconciler/src/ReactCurrentFiber';
2932

3033
export function findHostInstance_DEPRECATED<TElementType: ElementType>(
3134
componentOrHandle: ?(ElementRef<TElementType> | number),
3235
): ?ElementRef<HostComponent<mixed>> {
3336
if (__DEV__) {
3437
const owner = currentOwner;
35-
if (owner !== null && owner.stateNode !== null) {
38+
if (owner !== null && isRendering && owner.stateNode !== null) {
3639
if (!owner.stateNode._warnedAboutRefsInRender) {
3740
console.error(
3841
'%s is accessing findNodeHandle inside its render(). ' +

packages/react-reconciler/src/ReactCurrentFiber.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,33 @@ function getCurrentFiberStackInDev(): string {
4141
return '';
4242
}
4343

44+
export function resetCurrentDebugFiberInDEV() {
45+
if (__DEV__) {
46+
resetCurrentFiber();
47+
}
48+
}
49+
50+
export function setCurrentDebugFiberInDEV(fiber: Fiber | null) {
51+
if (__DEV__) {
52+
setCurrentFiber(fiber);
53+
}
54+
}
55+
4456
export function resetCurrentFiber() {
4557
if (__DEV__) {
4658
ReactSharedInternals.getCurrentStack = null;
47-
current = null;
4859
isRendering = false;
4960
}
61+
current = null;
5062
}
5163

5264
export function setCurrentFiber(fiber: Fiber | null) {
5365
if (__DEV__) {
5466
ReactSharedInternals.getCurrentStack =
5567
fiber === null ? null : getCurrentFiberStackInDev;
56-
current = fiber;
5768
isRendering = false;
5869
}
70+
current = fiber;
5971
}
6072

6173
export function getCurrentFiber(): Fiber | null {

packages/react-reconciler/src/ReactFiberAsyncDispatcher.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {CacheContext} from './ReactFiberCacheComponent';
1616

1717
import {disableStringRefs} from 'shared/ReactFeatureFlags';
1818

19-
import {currentOwner} from './ReactFiberCurrentOwner';
19+
import {current as currentOwner} from 'react-reconciler/src/ReactCurrentFiber';
2020

2121
function getCacheForType<T>(resourceType: () => T): T {
2222
if (!enableCache) {

packages/react-reconciler/src/ReactFiberBeginWork.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ import {
125125
import {
126126
getCurrentFiberOwnerNameInDevOrNull,
127127
setIsRendering,
128+
setCurrentFiber,
128129
} from './ReactCurrentFiber';
129130
import {
130131
resolveFunctionForHotReloading,
@@ -296,7 +297,6 @@ import {
296297
pushRootMarkerInstance,
297298
TransitionTracingMarker,
298299
} from './ReactFiberTracingMarkerComponent';
299-
import {setCurrentOwner} from './ReactFiberCurrentOwner';
300300

301301
// A special exception that's used to unwind the stack when an update flows
302302
// into a dehydrated boundary.
@@ -432,7 +432,6 @@ function updateForwardRef(
432432
markComponentRenderStarted(workInProgress);
433433
}
434434
if (__DEV__) {
435-
setCurrentOwner(workInProgress);
436435
setIsRendering(true);
437436
nextChildren = renderWithHooks(
438437
current,
@@ -1150,7 +1149,6 @@ function updateFunctionComponent(
11501149
markComponentRenderStarted(workInProgress);
11511150
}
11521151
if (__DEV__) {
1153-
setCurrentOwner(workInProgress);
11541152
setIsRendering(true);
11551153
nextChildren = renderWithHooks(
11561154
current,
@@ -1373,7 +1371,7 @@ function finishClassComponent(
13731371

13741372
// Rerender
13751373
if (__DEV__ || !disableStringRefs) {
1376-
setCurrentOwner(workInProgress);
1374+
setCurrentFiber(workInProgress);
13771375
}
13781376
let nextChildren;
13791377
if (
@@ -3419,7 +3417,6 @@ function updateContextConsumer(
34193417
}
34203418
let newChildren;
34213419
if (__DEV__) {
3422-
setCurrentOwner(workInProgress);
34233420
setIsRendering(true);
34243421
newChildren = render(newValue);
34253422
setIsRendering(false);

packages/react-reconciler/src/ReactFiberCommitWork.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ import {
101101
} from './ReactFiberFlags';
102102
import getComponentNameFromFiber from 'react-reconciler/src/getComponentNameFromFiber';
103103
import {
104-
resetCurrentFiber as resetCurrentDebugFiberInDEV,
105-
setCurrentFiber as setCurrentDebugFiberInDEV,
104+
resetCurrentDebugFiberInDEV,
105+
setCurrentDebugFiberInDEV,
106106
getCurrentFiber as getCurrentDebugFiberInDEV,
107107
} from './ReactCurrentFiber';
108108
import {resolveClassComponentProps} from './ReactFiberClassComponent';
@@ -2486,7 +2486,7 @@ export function commitMutationEffects(
24862486

24872487
setCurrentDebugFiberInDEV(finishedWork);
24882488
commitMutationEffectsOnFiber(finishedWork, root, committedLanes);
2489-
setCurrentDebugFiberInDEV(finishedWork);
2489+
resetCurrentDebugFiberInDEV();
24902490

24912491
inProgressLanes = null;
24922492
inProgressRoot = null;

packages/react-reconciler/src/ReactFiberCurrentOwner.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/react-reconciler/src/ReactFiberReconciler.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ import {
7878
import {
7979
isRendering as ReactCurrentFiberIsRendering,
8080
current as ReactCurrentFiberCurrent,
81-
resetCurrentFiber as resetCurrentDebugFiberInDEV,
82-
setCurrentFiber as setCurrentDebugFiberInDEV,
81+
resetCurrentDebugFiberInDEV,
82+
setCurrentDebugFiberInDEV,
8383
} from './ReactCurrentFiber';
8484
import {StrictLegacyMode} from './ReactTypeOfMode';
8585
import {

packages/react-reconciler/src/ReactFiberTreeReflection.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
SuspenseComponent,
2525
} from './ReactWorkTags';
2626
import {NoFlags, Placement, Hydrating} from './ReactFiberFlags';
27-
import {currentOwner} from './ReactFiberCurrentOwner';
27+
import {current as currentOwner, isRendering} from './ReactCurrentFiber';
2828

2929
export function getNearestMountedFiber(fiber: Fiber): null | Fiber {
3030
let node = fiber;
@@ -90,7 +90,7 @@ export function isFiberMounted(fiber: Fiber): boolean {
9090
export function isMounted(component: React$Component<any, any>): boolean {
9191
if (__DEV__) {
9292
const owner = currentOwner;
93-
if (owner !== null && owner.tag === ClassComponent) {
93+
if (owner !== null && isRendering && owner.tag === ClassComponent) {
9494
const ownerFiber: Fiber = owner;
9595
const instance = ownerFiber.stateNode;
9696
if (!instance._warnedAboutRefsInRender) {

packages/react-reconciler/src/ReactFiberWorkLoop.js

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ import {
204204
ContextOnlyDispatcher,
205205
} from './ReactFiberHooks';
206206
import {DefaultAsyncDispatcher} from './ReactFiberAsyncDispatcher';
207-
import {setCurrentOwner} from './ReactFiberCurrentOwner';
208207
import {
209208
createCapturedValueAtFiber,
210209
type CapturedValue,
@@ -230,8 +229,9 @@ import ReactStrictModeWarnings from './ReactStrictModeWarnings';
230229
import {
231230
isRendering as ReactCurrentDebugFiberIsRenderingInDEV,
232231
current as ReactCurrentFiberCurrent,
233-
resetCurrentFiber as resetCurrentDebugFiberInDEV,
234-
setCurrentFiber as setCurrentDebugFiberInDEV,
232+
resetCurrentDebugFiberInDEV,
233+
setCurrentDebugFiberInDEV,
234+
resetCurrentFiber,
235235
} from './ReactCurrentFiber';
236236
import {
237237
isDevToolsPresent,
@@ -1683,9 +1683,8 @@ function handleThrow(root: FiberRoot, thrownValue: any): void {
16831683
// These should be reset immediately because they're only supposed to be set
16841684
// when React is executing user code.
16851685
resetHooksAfterThrow();
1686-
resetCurrentDebugFiberInDEV();
16871686
if (__DEV__ || !disableStringRefs) {
1688-
setCurrentOwner(null);
1687+
resetCurrentFiber();
16891688
}
16901689

16911690
if (thrownValue === SuspenseException) {
@@ -2377,18 +2376,16 @@ function performUnitOfWork(unitOfWork: Fiber): void {
23772376
next = beginWork(current, unitOfWork, entangledRenderLanes);
23782377
}
23792378

2380-
resetCurrentDebugFiberInDEV();
2379+
if (__DEV__ || !disableStringRefs) {
2380+
resetCurrentFiber();
2381+
}
23812382
unitOfWork.memoizedProps = unitOfWork.pendingProps;
23822383
if (next === null) {
23832384
// If this doesn't spawn new work, complete the current work.
23842385
completeUnitOfWork(unitOfWork);
23852386
} else {
23862387
workInProgress = next;
23872388
}
2388-
2389-
if (__DEV__ || !disableStringRefs) {
2390-
setCurrentOwner(null);
2391-
}
23922389
}
23932390

23942391
function replaySuspendedUnitOfWork(unitOfWork: Fiber): void {
@@ -2399,7 +2396,6 @@ function replaySuspendedUnitOfWork(unitOfWork: Fiber): void {
23992396
setCurrentDebugFiberInDEV(unitOfWork);
24002397

24012398
let next;
2402-
setCurrentDebugFiberInDEV(unitOfWork);
24032399
const isProfilingMode =
24042400
enableProfilerTimer && (unitOfWork.mode & ProfileMode) !== NoMode;
24052401
if (isProfilingMode) {
@@ -2492,18 +2488,16 @@ function replaySuspendedUnitOfWork(unitOfWork: Fiber): void {
24922488
// The begin phase finished successfully without suspending. Return to the
24932489
// normal work loop.
24942490

2495-
resetCurrentDebugFiberInDEV();
2491+
if (__DEV__ || !disableStringRefs) {
2492+
resetCurrentFiber();
2493+
}
24962494
unitOfWork.memoizedProps = unitOfWork.pendingProps;
24972495
if (next === null) {
24982496
// If this doesn't spawn new work, complete the current work.
24992497
completeUnitOfWork(unitOfWork);
25002498
} else {
25012499
workInProgress = next;
25022500
}
2503-
2504-
if (__DEV__ || !disableStringRefs) {
2505-
setCurrentOwner(null);
2506-
}
25072501
}
25082502

25092503
function throwAndUnwindWorkLoop(
@@ -2893,11 +2887,6 @@ function commitRootImpl(
28932887
const prevExecutionContext = executionContext;
28942888
executionContext |= CommitContext;
28952889

2896-
// Reset this to null before calling lifecycles
2897-
if (__DEV__ || !disableStringRefs) {
2898-
setCurrentOwner(null);
2899-
}
2900-
29012890
// The commit phase is broken into several sub-phases. We do a separate pass
29022891
// of the effect list for each phase: all mutation effects come before all
29032892
// layout effects, and so on.

0 commit comments

Comments
 (0)