Skip to content

Commit 433ea63

Browse files
committed
Don't clear other flags when adding Deletion
Same as facebook#20398 but for Deletions. There's no new regression test, but in the effects refactor, existing tests will fail without this.
1 parent cdfde3a commit 433ea63

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

packages/react-reconciler/src/ReactChildFiber.new.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ import type {Fiber} from './ReactInternalTypes';
1313
import type {Lanes} from './ReactFiberLane.new';
1414

1515
import getComponentName from 'shared/getComponentName';
16-
import {Deletion, ChildDeletion, Placement} from './ReactFiberFlags';
16+
import {
17+
Deletion,
18+
ChildDeletion,
19+
Placement,
20+
StaticMask,
21+
} from './ReactFiberFlags';
1722
import {
1823
getIteratorFn,
1924
REACT_ELEMENT_TYPE,
@@ -275,7 +280,7 @@ function ChildReconciler(shouldTrackSideEffects) {
275280
returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;
276281
}
277282
childToDelete.nextEffect = null;
278-
childToDelete.flags = Deletion;
283+
childToDelete.flags = (childToDelete.flags & StaticMask) | Deletion;
279284

280285
let deletions = returnFiber.deletions;
281286
if (deletions === null) {

packages/react-reconciler/src/ReactFiberBeginWork.new.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -2007,7 +2007,8 @@ function updateSuspensePrimaryChildren(
20072007
if (currentFallbackChildFragment !== null) {
20082008
// Delete the fallback child fragment
20092009
currentFallbackChildFragment.nextEffect = null;
2010-
currentFallbackChildFragment.flags = Deletion;
2010+
currentFallbackChildFragment.flags =
2011+
(currentFallbackChildFragment.flags & StaticMask) | Deletion;
20112012
workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChildFragment;
20122013
let deletions = workInProgress.deletions;
20132014
if (deletions === null) {
@@ -2998,7 +2999,7 @@ function remountFiber(
29982999
returnFiber.firstEffect = returnFiber.lastEffect = current;
29993000
}
30003001
current.nextEffect = null;
3001-
current.flags = Deletion;
3002+
current.flags = (current.flags & StaticMask) | Deletion;
30023003

30033004
let deletions = returnFiber.deletions;
30043005
if (deletions === null) {

packages/react-reconciler/src/ReactFiberHydrationContext.new.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,13 @@ import {
2424
HostRoot,
2525
SuspenseComponent,
2626
} from './ReactWorkTags';
27-
import {Deletion, ChildDeletion, Placement, Hydrating} from './ReactFiberFlags';
27+
import {
28+
Deletion,
29+
ChildDeletion,
30+
Placement,
31+
Hydrating,
32+
StaticMask,
33+
} from './ReactFiberFlags';
2834
import invariant from 'shared/invariant';
2935

3036
import {
@@ -124,7 +130,7 @@ function deleteHydratableInstance(
124130
const childToDelete = createFiberFromHostInstanceForDeletion();
125131
childToDelete.stateNode = instance;
126132
childToDelete.return = returnFiber;
127-
childToDelete.flags = Deletion;
133+
childToDelete.flags = (childToDelete.flags & StaticMask) | Deletion;
128134

129135
// This might seem like it belongs on progressedFirstDeletion. However,
130136
// these children are not part of the reconciliation list of children.

0 commit comments

Comments
 (0)