diff --git a/packages/react-dom/src/events/ReactDOMEventListener.js b/packages/react-dom/src/events/ReactDOMEventListener.js index 81b3a1b85dce4..590d8c2d9f5b3 100644 --- a/packages/react-dom/src/events/ReactDOMEventListener.js +++ b/packages/react-dom/src/events/ReactDOMEventListener.js @@ -49,9 +49,6 @@ import { getCurrentUpdatePriority, setCurrentUpdatePriority, } from 'react-reconciler/src/ReactEventPriorities'; -import ReactSharedInternals from 'shared/ReactSharedInternals'; - -const {ReactCurrentBatchConfig} = ReactSharedInternals; // TODO: can we stop exporting these? export let _enabled = true; @@ -128,14 +125,11 @@ function dispatchContinuousEvent( nativeEvent, ) { const previousPriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; - ReactCurrentBatchConfig.transition = 0; try { setCurrentUpdatePriority(ContinuousEventPriority); dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } } diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js index 0b15fb13a2351..99f3e014148f5 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js @@ -245,7 +245,6 @@ const ceil = Math.ceil; const { ReactCurrentDispatcher, ReactCurrentOwner, - ReactCurrentBatchConfig, IsSomeRendererActing, } = ReactSharedInternals; @@ -1063,14 +1062,11 @@ export function flushDiscreteUpdates() { export function deferredUpdates(fn: () => A): A { const previousPriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DefaultEventPriority); return fn(); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } } @@ -1114,14 +1110,11 @@ export function discreteUpdates( d: D, ): R { const previousPriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); return fn(a, b, c, d); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; if (executionContext === NoContext) { resetRenderTimer(); } @@ -1151,10 +1144,8 @@ export function flushSync(fn: A => R, a: A): R { const prevExecutionContext = executionContext; executionContext |= BatchedContext; - const prevTransition = ReactCurrentBatchConfig.transition; const previousPriority = getCurrentUpdatePriority(); try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); if (fn) { return fn(a); @@ -1163,7 +1154,6 @@ export function flushSync(fn: A => R, a: A): R { } } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch. // Note that this will happen even if batchedUpdates is higher up @@ -1185,15 +1175,12 @@ export function flushSync(fn: A => R, a: A): R { export function flushControlled(fn: () => mixed): void { const prevExecutionContext = executionContext; executionContext |= BatchedContext; - const prevTransition = ReactCurrentBatchConfig.transition; const previousPriority = getCurrentUpdatePriority(); try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); fn(); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; executionContext = prevExecutionContext; if (executionContext === NoContext) { @@ -1688,13 +1675,10 @@ function commitRoot(root) { // TODO: This no longer makes any sense. We already wrap the mutation and // layout phases. Should be able to remove. const previousUpdateLanePriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); commitRootImpl(root, previousUpdateLanePriority); } finally { - ReactCurrentBatchConfig.transition = prevTransition; setCurrentUpdatePriority(previousUpdateLanePriority); } @@ -1816,8 +1800,6 @@ function commitRootImpl(root, renderPriorityLevel) { NoFlags; if (subtreeHasEffects || rootHasEffect) { - const prevTransition = ReactCurrentBatchConfig.transition; - ReactCurrentBatchConfig.transition = 0; const previousPriority = getCurrentUpdatePriority(); setCurrentUpdatePriority(DiscreteEventPriority); @@ -1899,7 +1881,6 @@ function commitRootImpl(root, renderPriorityLevel) { // Reset the priority to the previous non-sync value. setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } else { // No effects. root.current = finishedWork; @@ -2036,15 +2017,12 @@ export function flushPassiveEffects(): boolean { if (rootWithPendingPassiveEffects !== null) { const renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes); const priority = lowerEventPriority(DefaultEventPriority, renderPriority); - const prevTransition = ReactCurrentBatchConfig.transition; const previousPriority = getCurrentUpdatePriority(); try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(priority); return flushPassiveEffectsImpl(); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } } return false; diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.old.js b/packages/react-reconciler/src/ReactFiberWorkLoop.old.js index 7b03e4cc743df..e7328b989083b 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.old.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.old.js @@ -245,7 +245,6 @@ const ceil = Math.ceil; const { ReactCurrentDispatcher, ReactCurrentOwner, - ReactCurrentBatchConfig, IsSomeRendererActing, } = ReactSharedInternals; @@ -1063,14 +1062,11 @@ export function flushDiscreteUpdates() { export function deferredUpdates(fn: () => A): A { const previousPriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DefaultEventPriority); return fn(); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } } @@ -1114,14 +1110,11 @@ export function discreteUpdates( d: D, ): R { const previousPriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); return fn(a, b, c, d); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; if (executionContext === NoContext) { resetRenderTimer(); } @@ -1151,10 +1144,8 @@ export function flushSync(fn: A => R, a: A): R { const prevExecutionContext = executionContext; executionContext |= BatchedContext; - const prevTransition = ReactCurrentBatchConfig.transition; const previousPriority = getCurrentUpdatePriority(); try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); if (fn) { return fn(a); @@ -1163,7 +1154,6 @@ export function flushSync(fn: A => R, a: A): R { } } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch. // Note that this will happen even if batchedUpdates is higher up @@ -1185,15 +1175,12 @@ export function flushSync(fn: A => R, a: A): R { export function flushControlled(fn: () => mixed): void { const prevExecutionContext = executionContext; executionContext |= BatchedContext; - const prevTransition = ReactCurrentBatchConfig.transition; const previousPriority = getCurrentUpdatePriority(); try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); fn(); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; executionContext = prevExecutionContext; if (executionContext === NoContext) { @@ -1688,13 +1675,10 @@ function commitRoot(root) { // TODO: This no longer makes any sense. We already wrap the mutation and // layout phases. Should be able to remove. const previousUpdateLanePriority = getCurrentUpdatePriority(); - const prevTransition = ReactCurrentBatchConfig.transition; try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(DiscreteEventPriority); commitRootImpl(root, previousUpdateLanePriority); } finally { - ReactCurrentBatchConfig.transition = prevTransition; setCurrentUpdatePriority(previousUpdateLanePriority); } @@ -1816,8 +1800,6 @@ function commitRootImpl(root, renderPriorityLevel) { NoFlags; if (subtreeHasEffects || rootHasEffect) { - const prevTransition = ReactCurrentBatchConfig.transition; - ReactCurrentBatchConfig.transition = 0; const previousPriority = getCurrentUpdatePriority(); setCurrentUpdatePriority(DiscreteEventPriority); @@ -1899,7 +1881,6 @@ function commitRootImpl(root, renderPriorityLevel) { // Reset the priority to the previous non-sync value. setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } else { // No effects. root.current = finishedWork; @@ -2036,15 +2017,12 @@ export function flushPassiveEffects(): boolean { if (rootWithPendingPassiveEffects !== null) { const renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes); const priority = lowerEventPriority(DefaultEventPriority, renderPriority); - const prevTransition = ReactCurrentBatchConfig.transition; const previousPriority = getCurrentUpdatePriority(); try { - ReactCurrentBatchConfig.transition = 0; setCurrentUpdatePriority(priority); return flushPassiveEffectsImpl(); } finally { setCurrentUpdatePriority(previousPriority); - ReactCurrentBatchConfig.transition = prevTransition; } } return false; diff --git a/packages/react-reconciler/src/__tests__/ReactFlushSync-test.js b/packages/react-reconciler/src/__tests__/ReactFlushSync-test.js index a3df1effd7b35..327b4a87ca678 100644 --- a/packages/react-reconciler/src/__tests__/ReactFlushSync-test.js +++ b/packages/react-reconciler/src/__tests__/ReactFlushSync-test.js @@ -3,7 +3,6 @@ let ReactNoop; let Scheduler; let useState; let useEffect; -let startTransition; describe('ReactFlushSync', () => { beforeEach(() => { @@ -14,7 +13,6 @@ describe('ReactFlushSync', () => { Scheduler = require('scheduler'); useState = React.useState; useEffect = React.useEffect; - startTransition = React.unstable_startTransition; }); function Text({text}) { @@ -64,47 +62,6 @@ describe('ReactFlushSync', () => { expect(root).toMatchRenderedOutput('1, 1'); }); - // @gate experimental - test('nested with startTransition', async () => { - let setSyncState; - let setState; - function App() { - const [syncState, _setSyncState] = useState(0); - const [state, _setState] = useState(0); - setSyncState = _setSyncState; - setState = _setState; - return ; - } - - const root = ReactNoop.createRoot(); - await ReactNoop.act(async () => { - root.render(); - }); - expect(Scheduler).toHaveYielded(['0, 0']); - expect(root).toMatchRenderedOutput('0, 0'); - - await ReactNoop.act(async () => { - ReactNoop.flushSync(() => { - startTransition(() => { - // This should be async even though flushSync is on the stack, because - // startTransition is closer. - setState(1); - ReactNoop.flushSync(() => { - // This should be async even though startTransition is on the stack, - // because flushSync is closer. - setSyncState(1); - }); - }); - }); - // Only the sync update should have flushed - expect(Scheduler).toHaveYielded(['1, 0']); - expect(root).toMatchRenderedOutput('1, 0'); - }); - // Now the async update has flushed, too. - expect(Scheduler).toHaveYielded(['1, 1']); - expect(root).toMatchRenderedOutput('1, 1'); - }); - test('flushes passive effects synchronously when they are the result of a sync render', async () => { function App() { useEffect(() => {