Skip to content

Commit 64ddef4

Browse files
authored
Revert "Remove onScroll bubbling flag (#19535)" (#19655)
This reverts commit e9721e1.
1 parent dd651df commit 64ddef4

12 files changed

+45
-14
lines changed

packages/react-dom/src/__tests__/ReactDOMEventListener-test.js

+17-6
Original file line numberDiff line numberDiff line change
@@ -712,12 +712,23 @@ describe('ReactDOMEventListener', () => {
712712
bubbles: false,
713713
}),
714714
);
715-
expect(log).toEqual([
716-
['capture', 'grand'],
717-
['capture', 'parent'],
718-
['capture', 'child'],
719-
['bubble', 'child'],
720-
]);
715+
if (gate(flags => flags.disableOnScrollBubbling)) {
716+
expect(log).toEqual([
717+
['capture', 'grand'],
718+
['capture', 'parent'],
719+
['capture', 'child'],
720+
['bubble', 'child'],
721+
]);
722+
} else {
723+
expect(log).toEqual([
724+
['capture', 'grand'],
725+
['capture', 'parent'],
726+
['capture', 'child'],
727+
['bubble', 'child'],
728+
['bubble', 'parent'],
729+
['bubble', 'grand'],
730+
]);
731+
}
721732
} finally {
722733
document.body.removeChild(container);
723734
}

packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js

+6
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,12 @@ describe('ReactDOMEventListener', () => {
12251225
});
12261226

12271227
describe('non-bubbling events that do not bubble in React', () => {
1228+
// This test will fail outside of the no-bubbling flag
1229+
// because its bubbling emulation is currently broken.
1230+
// In particular, if the target itself doesn't have
1231+
// a handler, it will not emulate bubbling correctly.
1232+
// Instead of fixing this, we'll just turn this flag on.
1233+
// @gate disableOnScrollBubbling
12281234
it('onScroll', () => {
12291235
testNonBubblingEvent({
12301236
type: 'div',

packages/react-dom/src/events/plugins/SimpleEventPlugin.js

+13-8
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ import {IS_EVENT_HANDLE_NON_MANAGED_NODE} from '../EventSystemFlags';
4747
import getEventCharCode from '../getEventCharCode';
4848
import {IS_CAPTURE_PHASE} from '../EventSystemFlags';
4949

50-
import {enableCreateEventHandleAPI} from 'shared/ReactFeatureFlags';
50+
import {
51+
enableCreateEventHandleAPI,
52+
disableOnScrollBubbling,
53+
} from 'shared/ReactFeatureFlags';
5154

5255
function extractEvents(
5356
dispatchQueue: DispatchQueue,
@@ -182,13 +185,15 @@ function extractEvents(
182185
// In the past, React has always bubbled them, but this can be surprising.
183186
// We're going to try aligning closer to the browser behavior by not bubbling
184187
// them in React either. We'll start by not bubbling onScroll, and then expand.
185-
const accumulateTargetOnly =
186-
!inCapturePhase &&
187-
// TODO: ideally, we'd eventually add all events from
188-
// nonDelegatedEvents list in DOMPluginEventSystem.
189-
// Then we can remove this special list.
190-
// This is a breaking change that can wait until React 18.
191-
domEventName === 'scroll';
188+
let accumulateTargetOnly = false;
189+
if (disableOnScrollBubbling) {
190+
accumulateTargetOnly =
191+
!inCapturePhase &&
192+
// TODO: ideally, we'd eventually add all events from
193+
// nonDelegatedEvents list in DOMPluginEventSystem.
194+
// Then we can remove this special list.
195+
domEventName === 'scroll';
196+
}
192197

193198
accumulateSinglePhaseListeners(
194199
targetInst,

packages/shared/ReactFeatureFlags.js

+1
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,4 @@ export const enableDiscreteEventFlushingChange = false;
135135

136136
// https://github.com/facebook/react/pull/19654
137137
export const enablePassiveEventIntervention = true;
138+
export const disableOnScrollBubbling = true;

packages/shared/forks/ReactFeatureFlags.native-fb.js

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const enableComponentStackLocations = false;
4444
export const enableLegacyFBSupport = false;
4545
export const enableFilterEmptyStringAttributesDOM = false;
4646
export const skipUnmountedBoundaries = false;
47+
export const disableOnScrollBubbling = true;
4748

4849
export const enableNewReconciler = false;
4950
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.native-oss.js

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const enableComponentStackLocations = false;
4343
export const enableLegacyFBSupport = false;
4444
export const enableFilterEmptyStringAttributesDOM = false;
4545
export const skipUnmountedBoundaries = false;
46+
export const disableOnScrollBubbling = true;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.js

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const enableComponentStackLocations = true;
4343
export const enableLegacyFBSupport = false;
4444
export const enableFilterEmptyStringAttributesDOM = false;
4545
export const skipUnmountedBoundaries = false;
46+
export const disableOnScrollBubbling = true;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.www.js

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const enableComponentStackLocations = true;
4343
export const enableLegacyFBSupport = false;
4444
export const enableFilterEmptyStringAttributesDOM = false;
4545
export const skipUnmountedBoundaries = false;
46+
export const disableOnScrollBubbling = true;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.testing.js

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const enableComponentStackLocations = true;
4343
export const enableLegacyFBSupport = false;
4444
export const enableFilterEmptyStringAttributesDOM = false;
4545
export const skipUnmountedBoundaries = false;
46+
export const disableOnScrollBubbling = true;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.testing.www.js

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const enableComponentStackLocations = true;
4343
export const enableLegacyFBSupport = !__EXPERIMENTAL__;
4444
export const enableFilterEmptyStringAttributesDOM = false;
4545
export const skipUnmountedBoundaries = __EXPERIMENTAL__;
46+
export const disableOnScrollBubbling = true;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.www-dynamic.js

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const enableLegacyFBSupport = __VARIANT__;
2020
export const decoupleUpdatePriorityFromScheduler = __VARIANT__;
2121
export const skipUnmountedBoundaries = __VARIANT__;
2222
export const enablePassiveEventIntervention = __VARIANT__;
23+
export const disableOnScrollBubbling = __VARIANT__;
2324

2425
// Enable this flag to help with concurrent mode debugging.
2526
// It logs information to the console about React scheduling, rendering, and commit phases.

packages/shared/forks/ReactFeatureFlags.www.js

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export const {
2828
enableDebugTracing,
2929
skipUnmountedBoundaries,
3030
enablePassiveEventIntervention,
31+
disableOnScrollBubbling,
3132
} = dynamicFeatureFlags;
3233

3334
// On WWW, __EXPERIMENTAL__ is used for a new modern build.

0 commit comments

Comments
 (0)