From 74d396cc0faba313374a2ea8d7ea9dca7209471a Mon Sep 17 00:00:00 2001 From: Toru Kobayashi Date: Wed, 9 Nov 2016 19:59:51 +0900 Subject: [PATCH 1/2] [Fiber]Warn when shoulcComponentUpdate returns undefined --- scripts/fiber/tests-failing.txt | 1 - scripts/fiber/tests-passing.txt | 1 + .../shared/fiber/ReactFiberClassComponent.js | 13 ++++++++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/fiber/tests-failing.txt b/scripts/fiber/tests-failing.txt index 385e8aa90418..a41b7230a1ec 100644 --- a/scripts/fiber/tests-failing.txt +++ b/scripts/fiber/tests-failing.txt @@ -526,7 +526,6 @@ src/renderers/shared/stack/reconciler/__tests__/ReactCompositeComponent-test.js * should warn about `setState` on unmounted components * should warn about `setState` in render * should warn about `setState` in getChildContext -* should warn when shouldComponentUpdate() returns undefined * should pass context to children when not owner * should pass context when re-rendered for static child * should pass context when re-rendered for static child within a composite component diff --git a/scripts/fiber/tests-passing.txt b/scripts/fiber/tests-passing.txt index bf71b6329a57..b554584d0163 100644 --- a/scripts/fiber/tests-passing.txt +++ b/scripts/fiber/tests-passing.txt @@ -1016,6 +1016,7 @@ src/renderers/shared/stack/reconciler/__tests__/ReactCompositeComponent-test.js * should silently allow `setState`, not call cb on unmounting components * should cleanup even if render() fatals * should call componentWillUnmount before unmounting +* should warn when shouldComponentUpdate() returns undefined * should warn when componentDidUnmount method is defined * should skip update when rerendering element in container * only renders once if updated in componentWillReceiveProps diff --git a/src/renderers/shared/fiber/ReactFiberClassComponent.js b/src/renderers/shared/fiber/ReactFiberClassComponent.js index 5d9be3005e34..9eb42a4c8afd 100644 --- a/src/renderers/shared/fiber/ReactFiberClassComponent.js +++ b/src/renderers/shared/fiber/ReactFiberClassComponent.js @@ -82,7 +82,18 @@ module.exports = function(scheduleUpdate : (fiber: Fiber) => void) { const instance = workInProgress.stateNode; if (typeof instance.shouldComponentUpdate === 'function') { - return instance.shouldComponentUpdate(newProps, newState); + const shouldUpdate = instance.shouldComponentUpdate(newProps, newState); + + if (__DEV__) { + warning( + shouldUpdate !== undefined, + '%s.shouldComponentUpdate(): Returned undefined instead of a ' + + 'boolean value. Make sure to return true or false.', + getName(workInProgress, instance) || 'ReactCompositeComponent' + ); + } + + return shouldUpdate; } const type = workInProgress.type; From 412ed53f8d751b8f8dbaf17c4dfecd4e8f9ad659 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 9 Nov 2016 16:30:02 +0000 Subject: [PATCH 2/2] Remove unnecessary fallback --- src/renderers/shared/fiber/ReactFiberClassComponent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderers/shared/fiber/ReactFiberClassComponent.js b/src/renderers/shared/fiber/ReactFiberClassComponent.js index 9eb42a4c8afd..fb8a0352fa2c 100644 --- a/src/renderers/shared/fiber/ReactFiberClassComponent.js +++ b/src/renderers/shared/fiber/ReactFiberClassComponent.js @@ -89,7 +89,7 @@ module.exports = function(scheduleUpdate : (fiber: Fiber) => void) { shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', - getName(workInProgress, instance) || 'ReactCompositeComponent' + getName(workInProgress, instance) ); }