From f1be24ce151689f0dd038f8558bdaba10c43b300 Mon Sep 17 00:00:00 2001 From: joshuakgoldberg Date: Fri, 22 Mar 2019 17:07:19 -0400 Subject: [PATCH 1/7] Added invariant for null/undefined create in useEffect, useLayoutEffect Fixes #15194. --- packages/react/src/ReactHooks.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 9c325b32a432..bb7c59657cda 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -93,6 +93,14 @@ export function useEffect( inputs: Array | void | null, ) { const dispatcher = resolveDispatcher(); + + if (__DEV__) { + invariant( + create != null, + 'useEffect must be called with a create function, but null or undefined was passed.', + ); + } + return dispatcher.useEffect(create, inputs); } @@ -101,6 +109,14 @@ export function useLayoutEffect( inputs: Array | void | null, ) { const dispatcher = resolveDispatcher(); + + if (__DEV__) { + invariant( + create != null, + 'useEffect must be called with a create function, but null or undefined was passed.', + ); + } + return dispatcher.useLayoutEffect(create, inputs); } From 965aaaeb53a7905a4e26e502f90cfbc8f5b57669 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 22 Mar 2019 21:52:25 -0400 Subject: [PATCH 2/7] Removed dev-only constraint --- packages/react/src/ReactHooks.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index bb7c59657cda..7972c08b40f4 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -94,12 +94,10 @@ export function useEffect( ) { const dispatcher = resolveDispatcher(); - if (__DEV__) { - invariant( - create != null, - 'useEffect must be called with a create function, but null or undefined was passed.', - ); - } + invariant( + create != null, + 'useEffect must be called with a create function, but null or undefined was passed.', + ); return dispatcher.useEffect(create, inputs); } @@ -110,12 +108,10 @@ export function useLayoutEffect( ) { const dispatcher = resolveDispatcher(); - if (__DEV__) { - invariant( - create != null, - 'useEffect must be called with a create function, but null or undefined was passed.', - ); - } + invariant( + create != null, + 'useEffect must be called with a create function, but null or undefined was passed.', + ); return dispatcher.useLayoutEffect(create, inputs); } From fd4de2c02ab01ac3b72179574c1a65a3e8c395a4 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 22 Mar 2019 21:59:16 -0400 Subject: [PATCH 3/7] Whoops, it's useLayoutEffect --- packages/react/src/ReactHooks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 7972c08b40f4..29d0efd7f669 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -110,7 +110,7 @@ export function useLayoutEffect( invariant( create != null, - 'useEffect must be called with a create function, but null or undefined was passed.', + 'useLayoutEffect must be called with a create function, but null or undefined was passed.', ); return dispatcher.useLayoutEffect(create, inputs); From 05e984a809e9a31611046540051dc946bac41f2b Mon Sep 17 00:00:00 2001 From: joshuakgoldberg Date: Mon, 25 Mar 2019 14:04:14 -0400 Subject: [PATCH 4/7] Switched to dev-only warnings --- packages/react/src/ReactHooks.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 29d0efd7f669..94959ea8cb4d 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -94,10 +94,12 @@ export function useEffect( ) { const dispatcher = resolveDispatcher(); - invariant( - create != null, - 'useEffect must be called with a create function, but null or undefined was passed.', - ); + if (__DEV__) { + warning( + create != null, + 'useEffect must be called with a create function, but null or undefined was passed.', + ); + } return dispatcher.useEffect(create, inputs); } @@ -108,10 +110,12 @@ export function useLayoutEffect( ) { const dispatcher = resolveDispatcher(); - invariant( - create != null, - 'useLayoutEffect must be called with a create function, but null or undefined was passed.', - ); + if (__DEV__) { + warning( + create != null, + 'useLayoutEffect must be called with a create function, but null or undefined was passed.', + ); + } return dispatcher.useLayoutEffect(create, inputs); } From 55664c6da2404c7adf5be5b7b9f280be84b01556 Mon Sep 17 00:00:00 2001 From: joshuakgoldberg Date: Mon, 25 Mar 2019 14:05:10 -0400 Subject: [PATCH 5/7] Also returning in the warnings --- packages/react/src/ReactHooks.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 94959ea8cb4d..76e151a31fca 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -99,6 +99,7 @@ export function useEffect( create != null, 'useEffect must be called with a create function, but null or undefined was passed.', ); + return; } return dispatcher.useEffect(create, inputs); @@ -115,6 +116,7 @@ export function useLayoutEffect( create != null, 'useLayoutEffect must be called with a create function, but null or undefined was passed.', ); + return; } return dispatcher.useLayoutEffect(create, inputs); From 6c0fb09777d6c0886d93f06e6878334f723ce572 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Tue, 26 Mar 2019 06:57:55 -0400 Subject: [PATCH 6/7] Revert "Also returning in the warnings" This reverts commit 55664c6da2404c7adf5be5b7b9f280be84b01556. --- packages/react/src/ReactHooks.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 76e151a31fca..94959ea8cb4d 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -99,7 +99,6 @@ export function useEffect( create != null, 'useEffect must be called with a create function, but null or undefined was passed.', ); - return; } return dispatcher.useEffect(create, inputs); @@ -116,7 +115,6 @@ export function useLayoutEffect( create != null, 'useLayoutEffect must be called with a create function, but null or undefined was passed.', ); - return; } return dispatcher.useLayoutEffect(create, inputs); From b6cf96d9e8d44ac9e0ed94cad073eea687901cb0 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sat, 11 Jan 2020 00:42:15 -0500 Subject: [PATCH 7/7] Back to invariant --- packages/react/src/ReactHooks.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 94959ea8cb4d..33875549830d 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -95,7 +95,7 @@ export function useEffect( const dispatcher = resolveDispatcher(); if (__DEV__) { - warning( + invariant( create != null, 'useEffect must be called with a create function, but null or undefined was passed.', ); @@ -111,7 +111,7 @@ export function useLayoutEffect( const dispatcher = resolveDispatcher(); if (__DEV__) { - warning( + invariant( create != null, 'useLayoutEffect must be called with a create function, but null or undefined was passed.', );