From d1219e2384fed031b974238f43c7ef6318d8aa3a Mon Sep 17 00:00:00 2001 From: Sophie Alpert Date: Thu, 18 Oct 2018 18:45:41 -0700 Subject: [PATCH] Revert "React.pure automatically forwards ref" Reverts #13822. We're not sure we want to do this. --- .../src/ReactFiberBeginWork.js | 7 +- .../src/__tests__/ReactPure-test.internal.js | 65 +------------------ 2 files changed, 6 insertions(+), 66 deletions(-) diff --git a/packages/react-reconciler/src/ReactFiberBeginWork.js b/packages/react-reconciler/src/ReactFiberBeginWork.js index 36fe0dc1dec7d..6dfed8599f8b9 100644 --- a/packages/react-reconciler/src/ReactFiberBeginWork.js +++ b/packages/react-reconciler/src/ReactFiberBeginWork.js @@ -242,7 +242,6 @@ function updatePureComponent( renderExpirationTime: ExpirationTime, ) { const render = Component.render; - const ref = workInProgress.ref; if ( current !== null && @@ -253,7 +252,7 @@ function updatePureComponent( // Default to shallow comparison let compare = Component.compare; compare = compare !== null ? compare : shallowEqual; - if (workInProgress.ref === current.ref && compare(prevProps, nextProps)) { + if (compare(prevProps, nextProps)) { return bailoutOnAlreadyFinishedWork( current, workInProgress, @@ -268,10 +267,10 @@ function updatePureComponent( if (__DEV__) { ReactCurrentOwner.current = workInProgress; ReactCurrentFiber.setCurrentPhase('render'); - nextChildren = render(nextProps, ref); + nextChildren = render(nextProps); ReactCurrentFiber.setCurrentPhase(null); } else { - nextChildren = render(nextProps, ref); + nextChildren = render(nextProps); } // React DevTools reads this flag. diff --git a/packages/react-reconciler/src/__tests__/ReactPure-test.internal.js b/packages/react-reconciler/src/__tests__/ReactPure-test.internal.js index ca1bb36851641..e9744254bbd8c 100644 --- a/packages/react-reconciler/src/__tests__/ReactPure-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactPure-test.internal.js @@ -39,10 +39,10 @@ describe('pure', () => { // a lazy function component. sharedTests('normal', (...args) => { const Pure = React.pure(...args); - function Indirection(props, ref) { - return ; + function Indirection(props) { + return ; } - return Promise.resolve(React.forwardRef(Indirection)); + return Promise.resolve(Indirection); }); sharedTests('lazy', (...args) => Promise.resolve(React.pure(...args))); @@ -195,65 +195,6 @@ describe('pure', () => { {withoutStack: true}, ); }); - - it('forwards ref', async () => { - const {unstable_Suspense: Suspense} = React; - const Transparent = pure((props, ref) => { - return
; - }); - const divRef = React.createRef(); - - ReactNoop.render( - }> - - , - ); - ReactNoop.flush(); - await Promise.resolve(); - ReactNoop.flush(); - expect(divRef.current.type).toBe('div'); - }); - - it('updates if only ref changes', async () => { - const {unstable_Suspense: Suspense} = React; - const Transparent = pure((props, ref) => { - return [,
]; - }); - - const divRef = React.createRef(); - const divRef2 = React.createRef(); - - ReactNoop.render( - }> - - , - ); - expect(ReactNoop.flush()).toEqual(['Loading...']); - await Promise.resolve(); - expect(ReactNoop.flush()).toEqual(['Text']); - expect(divRef.current.type).toBe('div'); - expect(divRef2.current).toBe(null); - - // Should re-render (new ref) - ReactNoop.render( - - - , - ); - expect(ReactNoop.flush()).toEqual(['Text']); - expect(divRef.current).toBe(null); - expect(divRef2.current.type).toBe('div'); - - // Should not re-render (same ref) - ReactNoop.render( - - - , - ); - expect(ReactNoop.flush()).toEqual([]); - expect(divRef.current).toBe(null); - expect(divRef2.current.type).toBe('div'); - }); }); } });