[Fiber] Gate Update flag on BeforeMutationMask on flags (#31921)
We're currently visiting the snapshot phase for every `Update` flag even though we rarely have to do anything in the Snapshot phase. The only flags that seem to use these wider visits is `enableCreateEventHandleAPI` and `enableUseEffectEventHook` but really neither of those should do that neither. They should schedule explicit Snapshot phases if needed.
Sebastian Markbåge committed
Jan 2, 2025 at 14:34 UTC
6ca7fbe884d17ef6c18d143421cc3e232bbba516
1 file changed
+11
-6
packages/react-reconciler/src/ReactFiberFlags.js
+11
-6
@@ -7,7 +7,10 @@
7
* @flow
8
*/
9
10
-import {enableCreateEventHandleAPI} from 'shared/ReactFeatureFlags';
10
+import {
11
+ enableCreateEventHandleAPI,
12
+ enableUseEffectEventHook,
13
+} from 'shared/ReactFeatureFlags';
14
15
export type Flags = number;
16
@@ -77,17 +80,19 @@ export const MountPassiveDev = /* */ 0b1000000000000000000000000000
80
// don't contain effects, by checking subtreeFlags.
81
82
export const BeforeMutationMask: number =
80
- // TODO: Remove Update flag from before mutation phase by re-landing Visibility
81
- // flag logic (see #20043)
82
- Update |
83
Snapshot |
84
(enableCreateEventHandleAPI
85
? // createEventHandle needs to visit deleted and hidden trees to
86
// fire beforeblur
87
// TODO: Only need to visit Deletions during BeforeMutation phase if an
88
// element is focused.
89
- ChildDeletion | Visibility
90
- : 0);
89
+ Update | ChildDeletion | Visibility
90
+ : enableUseEffectEventHook
91
+ ? // TODO: The useEffectEvent hook uses the snapshot phase for clean up but it
92
+ // really should use the mutation phase for this or at least schedule an
93
+ // explicit Snapshot phase flag for this.
94
+ Update
95
+ : 0);
96
97
export const MutationMask =
98
Placement |