From 1918e3b968a98b6b503169ef6e7f6d18a2844076 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Fri, 28 Aug 2020 01:11:31 +0100 Subject: [PATCH 1/3] Enable eager listeners in open source --- packages/shared/ReactFeatureFlags.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index 1ae1c94e618ab..bbf0498fd6b49 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -137,4 +137,4 @@ export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; export const disableOnScrollBubbling = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; From 4e69991036cc0f29af5d19453fe11b7d3d132a6c Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Fri, 28 Aug 2020 01:22:25 +0100 Subject: [PATCH 2/3] Fix tests --- .../src/__tests__/ReactDOMFiber-test.js | 18 +++++++++++++----- .../forks/ReactFeatureFlags.www-dynamic.js | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js index a91c2fac41cf3..130c06b443c67 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js @@ -1097,6 +1097,8 @@ describe('ReactDOMFiber', () => { }); it('should not update event handlers until commit', () => { + spyOnDev(console, 'error'); + let ops = []; const handlerA = () => ops.push('A'); const handlerB = () => ops.push('B'); @@ -1129,11 +1131,7 @@ describe('ReactDOMFiber', () => { class Click extends React.Component { constructor() { super(); - expect(() => { - node.click(); - }).toErrorDev( - 'Warning: unstable_flushDiscreteUpdates: Cannot flush updates when React is already rendering.', - ); + node.click(); } render() { return null; @@ -1183,6 +1181,16 @@ describe('ReactDOMFiber', () => { // Any click that happens after commit, should invoke A. click(); expect(ops).toEqual(['A']); + + if (__DEV__) { + // TODO: this warning shouldn't be firing in the first place if user didn't call it. + const errorCalls = console.error.calls.count(); + for (let i = 0; i < errorCalls; i++) { + expect(console.error.calls.argsFor(i)[0]).toMatch( + 'unstable_flushDiscreteUpdates: Cannot flush updates when React is already rendering.', + ); + } + } }); it('should not crash encountering low-priority tree', () => { diff --git a/packages/shared/forks/ReactFeatureFlags.www-dynamic.js b/packages/shared/forks/ReactFeatureFlags.www-dynamic.js index 3cf35c860738e..088422d4059e3 100644 --- a/packages/shared/forks/ReactFeatureFlags.www-dynamic.js +++ b/packages/shared/forks/ReactFeatureFlags.www-dynamic.js @@ -21,7 +21,7 @@ export const decoupleUpdatePriorityFromScheduler = __VARIANT__; export const skipUnmountedBoundaries = __VARIANT__; export const enablePassiveEventIntervention = __VARIANT__; export const disableOnScrollBubbling = __VARIANT__; -export const enableEagerRootListeners = __VARIANT__; +export const enableEagerRootListeners = !__VARIANT__; // Enable this flag to help with concurrent mode debugging. // It logs information to the console about React scheduling, rendering, and commit phases. From 2d131d7824728c6807d0e27fbcae7a6a63d21b95 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Fri, 28 Aug 2020 12:13:51 +0100 Subject: [PATCH 3/3] Enable in all places --- packages/shared/forks/ReactFeatureFlags.native-fb.js | 2 +- packages/shared/forks/ReactFeatureFlags.native-oss.js | 2 +- packages/shared/forks/ReactFeatureFlags.test-renderer.js | 2 +- packages/shared/forks/ReactFeatureFlags.test-renderer.native.js | 2 +- packages/shared/forks/ReactFeatureFlags.test-renderer.www.js | 2 +- packages/shared/forks/ReactFeatureFlags.testing.js | 2 +- packages/shared/forks/ReactFeatureFlags.testing.www.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index ed2b0952cb187..6db4a39e8f80b 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -51,7 +51,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index 0137e890879f7..5e7d0e48b0700 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -50,7 +50,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index 9481dfda8c797..fe5b969035af7 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -50,7 +50,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js index 4a710543cb94a..a353dafcf7dc4 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js @@ -49,7 +49,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index 5efc2138d0ef2..3b8939884ccf8 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -50,7 +50,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars diff --git a/packages/shared/forks/ReactFeatureFlags.testing.js b/packages/shared/forks/ReactFeatureFlags.testing.js index 8a715c02f9620..f6e17c5ded055 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.js @@ -50,7 +50,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = false; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars diff --git a/packages/shared/forks/ReactFeatureFlags.testing.www.js b/packages/shared/forks/ReactFeatureFlags.testing.www.js index 3dbbb37824441..43c5570857ad1 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.www.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.www.js @@ -50,7 +50,7 @@ export const deferRenderPhaseUpdateToNextBatch = true; export const decoupleUpdatePriorityFromScheduler = false; export const enableDiscreteEventFlushingChange = true; export const enablePassiveEventIntervention = true; -export const enableEagerRootListeners = false; +export const enableEagerRootListeners = true; // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars