diff --git a/packages/react-reconciler/src/ReactFiberReconciler.js b/packages/react-reconciler/src/ReactFiberReconciler.js index 65eebf04e48..d58371d97ba 100644 --- a/packages/react-reconciler/src/ReactFiberReconciler.js +++ b/packages/react-reconciler/src/ReactFiberReconciler.js @@ -470,6 +470,21 @@ export { flushPendingEffects as flushPassiveEffects, }; +// Deprecated: Add deprecation warning for removed flushSync API +let didWarnAboutFlushSync = false; +export const flushSync = __DEV__ + ? function flushSync() { + if (!didWarnAboutFlushSync) { + didWarnAboutFlushSync = true; + console.error( + 'The `flushSync` export from react-reconciler has been removed. ' + + 'Use `updateContainerSync()` followed by `flushSyncWork()` instead. ' + + 'See https://github.com/facebook/react/pull/28500 for more details.', + ); + } + } + : undefined; + export function getPublicRootInstance( container: OpaqueRoot, ): component(...props: any) | PublicInstance | null { diff --git a/packages/react-reconciler/src/__tests__/ReactReconcilerFlushSyncDeprecation-test.js b/packages/react-reconciler/src/__tests__/ReactReconcilerFlushSyncDeprecation-test.js new file mode 100644 index 00000000000..7f63f013a0e --- /dev/null +++ b/packages/react-reconciler/src/__tests__/ReactReconcilerFlushSyncDeprecation-test.js @@ -0,0 +1,30 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +let Reconciler; +let assertConsoleErrorDev; + +describe('ReactReconciler flushSync deprecation', () => { + beforeEach(() => { + jest.resetModules(); + Reconciler = require('react-reconciler'); + const InternalTestUtils = require('internal-test-utils'); + assertConsoleErrorDev = InternalTestUtils.assertConsoleErrorDev; + }); + + // @gate __DEV__ + it('warns when accessing the deprecated flushSync export', () => { + const flushSync = Reconciler.flushSync; + expect(typeof flushSync).toBe('function'); + flushSync(); + assertConsoleErrorDev([ + 'The `flushSync` export from react-reconciler has been removed. ' + + 'Use `updateContainerSync()` followed by `flushSyncWork()` instead. ' + + 'See https://github.com/facebook/react/pull/28500 for more details.', + ]); + }); +});