From 9682e5b980070e923a682f5eb83d0289e67d2b4b Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Thu, 30 Jan 2020 12:49:26 -0800 Subject: [PATCH] StrictMode should call sCU twice in DEV --- .../react-reconciler/src/ReactFiberClassComponent.js | 9 +++++++++ packages/react/src/__tests__/ReactStrictMode-test.js | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/packages/react-reconciler/src/ReactFiberClassComponent.js b/packages/react-reconciler/src/ReactFiberClassComponent.js index 6b28bf900a89..f4736d1d67f0 100644 --- a/packages/react-reconciler/src/ReactFiberClassComponent.js +++ b/packages/react-reconciler/src/ReactFiberClassComponent.js @@ -262,6 +262,15 @@ function checkShouldComponentUpdate( ) { const instance = workInProgress.stateNode; if (typeof instance.shouldComponentUpdate === 'function') { + if (__DEV__) { + if ( + debugRenderPhaseSideEffectsForStrictMode && + workInProgress.mode & StrictMode + ) { + // Invoke the function an extra time to help detect side-effects. + instance.shouldComponentUpdate(newProps, newState, nextContext); + } + } startPhaseTimer(workInProgress, 'shouldComponentUpdate'); const shouldUpdate = instance.shouldComponentUpdate( newProps, diff --git a/packages/react/src/__tests__/ReactStrictMode-test.js b/packages/react/src/__tests__/ReactStrictMode-test.js index 3acdab4ac3b5..5382fcd33d94 100644 --- a/packages/react/src/__tests__/ReactStrictMode-test.js +++ b/packages/react/src/__tests__/ReactStrictMode-test.js @@ -138,6 +138,7 @@ describe('ReactStrictMode', () => { 'getDerivedStateFromProps', 'getDerivedStateFromProps', 'shouldComponentUpdate', + 'shouldComponentUpdate', 'render', 'render', 'componentDidUpdate', @@ -166,6 +167,7 @@ describe('ReactStrictMode', () => { 'getDerivedStateFromProps', 'getDerivedStateFromProps', 'shouldComponentUpdate', + 'shouldComponentUpdate', ]); } else { expect(log).toEqual([ @@ -283,6 +285,7 @@ describe('ReactStrictMode', () => { 'getDerivedStateFromProps', 'getDerivedStateFromProps', 'shouldComponentUpdate', + 'shouldComponentUpdate', 'render', 'render', 'componentDidUpdate', @@ -305,6 +308,7 @@ describe('ReactStrictMode', () => { 'getDerivedStateFromProps', 'getDerivedStateFromProps', 'shouldComponentUpdate', + 'shouldComponentUpdate', ]); } else { expect(log).toEqual([