From 2f3df5f0b3dea452cd64508f760ff8684f7ce971 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 7 Feb 2017 13:49:55 -0800 Subject: [PATCH] Warn about setState in render --- scripts/fiber/tests-passing-except-dev.txt | 1 - scripts/fiber/tests-passing.txt | 1 + .../shared/fiber/ReactFiberScheduler.js | 17 +++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/scripts/fiber/tests-passing-except-dev.txt b/scripts/fiber/tests-passing-except-dev.txt index e5eb1addef..525db56f42 100644 --- a/scripts/fiber/tests-passing-except-dev.txt +++ b/scripts/fiber/tests-passing-except-dev.txt @@ -106,7 +106,6 @@ src/renderers/__tests__/ReactComponentTreeHook-test.native.js * does not report top-level wrapper as a root src/renderers/__tests__/ReactCompositeComponent-test.js -* should warn about `setState` in render * should warn about `setState` in getChildContext * should disallow nested render calls diff --git a/scripts/fiber/tests-passing.txt b/scripts/fiber/tests-passing.txt index 525a558660..70888b0002 100644 --- a/scripts/fiber/tests-passing.txt +++ b/scripts/fiber/tests-passing.txt @@ -577,6 +577,7 @@ src/renderers/__tests__/ReactCompositeComponent-test.js * should warn about `forceUpdate` on unmounted components * should warn about `setState` on unmounted components * should silently allow `setState`, not call cb on unmounting components +* should warn about `setState` in render * should cleanup even if render() fatals * should call componentWillUnmount before unmounting * should warn when shouldComponentUpdate() returns undefined diff --git a/src/renderers/shared/fiber/ReactFiberScheduler.js b/src/renderers/shared/fiber/ReactFiberScheduler.js index 258a254fab..9d4e3f36f2 100644 --- a/src/renderers/shared/fiber/ReactFiberScheduler.js +++ b/src/renderers/shared/fiber/ReactFiberScheduler.js @@ -102,6 +102,16 @@ if (__DEV__) { ctor && (ctor.displayName || ctor.name) || 'ReactClass' ); }; + + var warnAboutUpdateInRender = function(instance : ReactClass) { + warning( + ReactCurrentOwner.current == null, + 'Cannot update during an existing state transition (such as within ' + + '`render` or another component\'s constructor). Render methods should ' + + 'be a pure function of props and state; constructor side-effects are ' + + 'an anti-pattern, but can be moved to `componentWillMount`.' + ); + }; } var timeHeuristicForUnitOfWork = 1; @@ -1102,6 +1112,13 @@ module.exports = function(config : HostConfig