From 7ebb2e0fadff869f016c3656cc28a460d8ba94bc Mon Sep 17 00:00:00 2001 From: Sunil Pai Date: Wed, 3 Jul 2019 02:23:43 +0100 Subject: [PATCH 1/2] [fail] reset IsThisRendererActing correctly I missed this in https://github.com/facebook/react/pull/16039. I'd pointed at the wrong previous state, corrupting it in further use. This PR fixes that, and adds a test to make sure it doesn't happen again. --- fixtures/dom/src/index.test.js | 15 +++++++++++++++ .../react-dom/src/test-utils/ReactTestUtilsAct.js | 2 +- .../react-noop-renderer/src/createReactNoop.js | 2 +- .../src/ReactTestRendererAct.js | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/fixtures/dom/src/index.test.js b/fixtures/dom/src/index.test.js index fe3ec883fa90..365afe5752ab 100644 --- a/fixtures/dom/src/index.test.js +++ b/fixtures/dom/src/index.test.js @@ -37,6 +37,21 @@ it("doesn't warn when you use the right act + renderer: test", () => { }); }); +it('resets correctly across renderers', () => { + function Effecty() { + React.useEffect(() => {}, []); + return null; + } + TestUtils.act(() => { + TestRenderer.act(() => {}); + expect(() => { + TestRenderer.create(); + }).toWarnDev(["It looks like you're using the wrong act()"], { + withoutStack: true, + }); + }); +}); + it('warns when using createRoot() + .render', () => { const root = ReactDOM.unstable_createRoot(document.createElement('div')); expect(() => { diff --git a/packages/react-dom/src/test-utils/ReactTestUtilsAct.js b/packages/react-dom/src/test-utils/ReactTestUtilsAct.js index 791d4878c13d..b0775cc3bce0 100644 --- a/packages/react-dom/src/test-utils/ReactTestUtilsAct.js +++ b/packages/react-dom/src/test-utils/ReactTestUtilsAct.js @@ -91,7 +91,7 @@ function act(callback: () => Thenable) { actingUpdatesScopeDepth++; if (__DEV__) { previousIsSomeRendererActing = IsSomeRendererActing.current; - previousIsThisRendererActing = IsSomeRendererActing.current; + previousIsThisRendererActing = IsThisRendererActing.current; IsSomeRendererActing.current = true; IsThisRendererActing.current = true; } diff --git a/packages/react-noop-renderer/src/createReactNoop.js b/packages/react-noop-renderer/src/createReactNoop.js index 4dcae01cbc07..5033283025e2 100644 --- a/packages/react-noop-renderer/src/createReactNoop.js +++ b/packages/react-noop-renderer/src/createReactNoop.js @@ -620,7 +620,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) { actingUpdatesScopeDepth++; if (__DEV__) { previousIsSomeRendererActing = IsSomeRendererActing.current; - previousIsThisRendererActing = IsSomeRendererActing.current; + previousIsThisRendererActing = IsThisRendererActing.current; IsSomeRendererActing.current = true; IsThisRendererActing.current = true; } diff --git a/packages/react-test-renderer/src/ReactTestRendererAct.js b/packages/react-test-renderer/src/ReactTestRendererAct.js index 63aa64251b37..de6a76a06c15 100644 --- a/packages/react-test-renderer/src/ReactTestRendererAct.js +++ b/packages/react-test-renderer/src/ReactTestRendererAct.js @@ -72,7 +72,7 @@ function act(callback: () => Thenable) { actingUpdatesScopeDepth++; if (__DEV__) { previousIsSomeRendererActing = IsSomeRendererActing.current; - previousIsThisRendererActing = IsSomeRendererActing.current; + previousIsThisRendererActing = IsThisRendererActing.current; IsSomeRendererActing.current = true; IsThisRendererActing.current = true; } From 42149bfd9d508f985d3baa785ea039405357e99b Mon Sep 17 00:00:00 2001 From: Sunil Pai Date: Wed, 3 Jul 2019 02:57:11 +0100 Subject: [PATCH 2/2] warn for unacted effects only in strict mode --- packages/react-reconciler/src/ReactFiberWorkLoop.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.js b/packages/react-reconciler/src/ReactFiberWorkLoop.js index bdd43849c304..7efa1bd24356 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.js @@ -2454,10 +2454,7 @@ export function warnIfNotCurrentlyActingEffectsInDEV(fiber: Fiber): void { if (__DEV__) { if ( warnsIfNotActing === true && - (fiber.mode & StrictMode || - fiber.mode & ProfileMode || - fiber.mode & BatchedMode || - fiber.mode & ConcurrentMode) && + (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false ) {