From 432391caf05e7c0d38de46270b9bd181a35745d6 Mon Sep 17 00:00:00 2001 From: Manas Date: Sat, 2 Dec 2017 02:22:13 +0530 Subject: [PATCH] Adds deprecation warning for ReactDOM.unstable_createPortal --- .../react-dom/src/__tests__/ReactDOMFiber-test.js | 11 +++++++++++ packages/react-dom/src/client/ReactDOM.js | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js index 3db78615a17..fb6fb3abddb 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js @@ -222,6 +222,7 @@ describe('ReactDOMFiber', () => { // TODO: remove in React 17 it('should support unstable_createPortal alias', () => { + spyOnDev(console, 'warn'); const portalContainer = document.createElement('div'); ReactDOM.render( @@ -233,6 +234,16 @@ describe('ReactDOMFiber', () => { expect(portalContainer.innerHTML).toBe('
portal
'); expect(container.innerHTML).toBe('
'); + if (__DEV__) { + expect(console.warn.calls.count()).toBe(1); + expect(console.warn.calls.argsFor(0)[0]).toContain( + 'The ReactDOM.unstable_createPortal() alias has been deprecated, ' + + 'and will be removed in React 17+. Update your code to use ' + + 'ReactDOM.createPortal() instead. It has the exact same API, ' + + 'but without the "unstable_" prefix.', + ); + } + ReactDOM.unmountComponentAtNode(container); expect(portalContainer.innerHTML).toBe(''); expect(container.innerHTML).toBe(''); diff --git a/packages/react-dom/src/client/ReactDOM.js b/packages/react-dom/src/client/ReactDOM.js index 7e9266b0dc9..8772b166c43 100644 --- a/packages/react-dom/src/client/ReactDOM.js +++ b/packages/react-dom/src/client/ReactDOM.js @@ -75,6 +75,7 @@ const {precacheFiberNode, updateFiberProps} = ReactDOMComponentTree; let SUPPRESS_HYDRATION_WARNING; let topLevelUpdateWarnings; let warnOnInvalidCallback; +let didWarnAboutUnstableCreatePortal = false; if (__DEV__) { SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning'; @@ -1276,7 +1277,19 @@ const ReactDOM: Object = { // Temporary alias since we already shipped React 16 RC with it. // TODO: remove in React 17. - unstable_createPortal: createPortal, + unstable_createPortal(...args) { + if (!didWarnAboutUnstableCreatePortal) { + didWarnAboutUnstableCreatePortal = true; + lowPriorityWarning( + false, + 'The ReactDOM.unstable_createPortal() alias has been deprecated, ' + + 'and will be removed in React 17+. Update your code to use ' + + 'ReactDOM.createPortal() instead. It has the exact same API, ' + + 'but without the "unstable_" prefix.', + ); + } + return createPortal(...args); + }, unstable_batchedUpdates: ReactGenericBatching.batchedUpdates,