From d3cfc228ab379960deff7435215c4888fa8f8ed0 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 16:40:16 +0900 Subject: [PATCH 01/13] fix incorrect type definitions in useCallback --- src/React.res | 8 ++++---- src/v3/React_V3.res | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/React.res b/src/React.res index c9b39a3..f8930d1 100644 --- a/src/React.res +++ b/src/React.res @@ -262,10 +262,10 @@ external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") -external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f)) => 'f = "useCallback" +external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f0)) => 'f = "useCallback" @module("react") -external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'f = "useCallback" +external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f0, 'g)) => 'f = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -422,10 +422,10 @@ module Uncurried = { external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") - external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f)) => 'f = "useCallback" + external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f0)) => 'f = "useCallback" @module("react") - external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'f = "useCallback" + external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f0, 'g)) => 'f = "useCallback" } @set diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index c411f92..f9895b8 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -262,10 +262,10 @@ external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") -external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f)) => 'f = "useCallback" +external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f0)) => 'f = "useCallback" @module("react") -external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'f = "useCallback" +external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f0, 'g)) => 'f = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" From e6792a570de32bccd1b93c580acde211b9669292 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 16:41:21 +0900 Subject: [PATCH 02/13] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 355012b..28acf7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ #### :bug: Bug Fix - Fixed children type for `Fragment`, `StrictMode` and `Suspense`. +- Fixed the incorrect type definitions for `React.useCallback` #### :nail_care: Polish From 7ee684c46ef012e9beb7828896b7c85d88b65aad Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 16:52:35 +0900 Subject: [PATCH 03/13] 'callback --- src/React.res | 8 ++++---- src/v3/React_V3.res | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/React.res b/src/React.res index f8930d1..9720043 100644 --- a/src/React.res +++ b/src/React.res @@ -262,10 +262,10 @@ external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") -external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f0)) => 'f = "useCallback" +external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" @module("react") -external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f0, 'g)) => 'f = "useCallback" +external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -422,10 +422,10 @@ module Uncurried = { external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") - external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f0)) => 'f = "useCallback" + external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" @module("react") - external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f0, 'g)) => 'f = "useCallback" + external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } @set diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index f9895b8..77b6720 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -262,10 +262,10 @@ external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") -external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f0)) => 'f = "useCallback" +external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" @module("react") -external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f0, 'g)) => 'f = "useCallback" +external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -368,10 +368,10 @@ module Uncurried = { external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" @module("react") - external useCallback6: ('f, ('a, 'b, 'c, 'd, 'e, 'f)) => 'f = "useCallback" + external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" @module("react") - external useCallback7: ('f, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'f = "useCallback" + external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } @module("react") From f1422b42e3d5af220bf307d36cc2d24cfefe58ef Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 17:43:50 +0900 Subject: [PATCH 04/13] remove useCallback0-7 --- src/React.res | 52 ++------------------------------------------- src/v3/React_V3.res | 52 ++------------------------------------------- 2 files changed, 4 insertions(+), 100 deletions(-) diff --git a/src/React.res b/src/React.res index 9720043..92ff895 100644 --- a/src/React.res +++ b/src/React.res @@ -241,31 +241,7 @@ external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") -external useCallback: 'f => 'f = "useCallback" - -@module("react") -external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - -@module("react") -external useCallback1: ('f, array<'a>) => 'f = "useCallback" - -@module("react") -external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - -@module("react") -external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - -@module("react") -external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - -@module("react") -external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - -@module("react") -external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - -@module("react") -external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" +external useCallback: ('f, 'deps) => 'f = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -401,31 +377,7 @@ module Uncurried = { ) => ('state, (. 'action) => unit) = "useReducer" @module("react") - external useCallback: 'f => 'f = "useCallback" - - @module("react") - external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - - @module("react") - external useCallback1: ('f, array<'a>) => 'f = "useCallback" - - @module("react") - external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - - @module("react") - external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - - @module("react") - external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - - @module("react") - external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - - @module("react") - external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - - @module("react") - external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" + external useCallback: ('f, 'deps) => 'f = "useCallback" } @set diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index 77b6720..7f0755b 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -241,31 +241,7 @@ external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") -external useCallback: 'f => 'f = "useCallback" - -@module("react") -external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - -@module("react") -external useCallback1: ('f, array<'a>) => 'f = "useCallback" - -@module("react") -external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - -@module("react") -external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - -@module("react") -external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - -@module("react") -external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - -@module("react") -external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - -@module("react") -external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" +external useCallback: ('f, 'deps) => 'f = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -347,31 +323,7 @@ module Uncurried = { ) => ('state, (. 'action) => unit) = "useReducer" @module("react") - external useCallback: 'f => 'f = "useCallback" - - @module("react") - external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - - @module("react") - external useCallback1: ('f, array<'a>) => 'f = "useCallback" - - @module("react") - external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - - @module("react") - external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - - @module("react") - external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - - @module("react") - external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - - @module("react") - external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - - @module("react") - external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" + external useCallback: ('f, 'deps) => 'f = "useCallback" } @module("react") From 433a29060eac16d5145256a557816292ba33c505 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 18:34:34 +0900 Subject: [PATCH 05/13] Revert "remove useCallback0-7" This reverts commit f1422b42e3d5af220bf307d36cc2d24cfefe58ef. --- src/React.res | 52 +++++++++++++++++++++++++++++++++++++++++++-- src/v3/React_V3.res | 52 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 4 deletions(-) diff --git a/src/React.res b/src/React.res index 92ff895..9720043 100644 --- a/src/React.res +++ b/src/React.res @@ -241,7 +241,31 @@ external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") -external useCallback: ('f, 'deps) => 'f = "useCallback" +external useCallback: 'f => 'f = "useCallback" + +@module("react") +external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" + +@module("react") +external useCallback1: ('f, array<'a>) => 'f = "useCallback" + +@module("react") +external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" + +@module("react") +external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" + +@module("react") +external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" + +@module("react") +external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" + +@module("react") +external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" + +@module("react") +external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -377,7 +401,31 @@ module Uncurried = { ) => ('state, (. 'action) => unit) = "useReducer" @module("react") - external useCallback: ('f, 'deps) => 'f = "useCallback" + external useCallback: 'f => 'f = "useCallback" + + @module("react") + external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" + + @module("react") + external useCallback1: ('f, array<'a>) => 'f = "useCallback" + + @module("react") + external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" + + @module("react") + external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" + + @module("react") + external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" + + @module("react") + external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" + + @module("react") + external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" + + @module("react") + external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } @set diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index 7f0755b..77b6720 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -241,7 +241,31 @@ external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") -external useCallback: ('f, 'deps) => 'f = "useCallback" +external useCallback: 'f => 'f = "useCallback" + +@module("react") +external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" + +@module("react") +external useCallback1: ('f, array<'a>) => 'f = "useCallback" + +@module("react") +external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" + +@module("react") +external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" + +@module("react") +external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" + +@module("react") +external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" + +@module("react") +external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" + +@module("react") +external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") external useContext: Context.t<'any> => 'any = "useContext" @@ -323,7 +347,31 @@ module Uncurried = { ) => ('state, (. 'action) => unit) = "useReducer" @module("react") - external useCallback: ('f, 'deps) => 'f = "useCallback" + external useCallback: 'f => 'f = "useCallback" + + @module("react") + external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" + + @module("react") + external useCallback1: ('f, array<'a>) => 'f = "useCallback" + + @module("react") + external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" + + @module("react") + external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" + + @module("react") + external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" + + @module("react") + external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" + + @module("react") + external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" + + @module("react") + external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } @module("react") From c2e678879b581f057047fb40d83ce07b5bd7b896 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 18:54:39 +0900 Subject: [PATCH 06/13] deprecate useCallback0-7, add 'dep --- src/React.res | 36 ++++++++++++++++++------------------ src/v3/React_V3.res | 36 ++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/React.res b/src/React.res index 9720043..81a9364 100644 --- a/src/React.res +++ b/src/React.res @@ -241,30 +241,30 @@ external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") -external useCallback: 'f => 'f = "useCallback" +external useCallback: ('f, 'deps) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") @@ -401,30 +401,30 @@ module Uncurried = { ) => ('state, (. 'action) => unit) = "useReducer" @module("react") - external useCallback: 'f => 'f = "useCallback" + external useCallback: ('f, 'deps) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index 77b6720..ca9cde6 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -241,30 +241,30 @@ external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") -external useCallback: 'f => 'f = "useCallback" +external useCallback: ('f, 'deps) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" -@module("react") +@module("react") @deprecated("Please use the useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") @@ -347,30 +347,30 @@ module Uncurried = { ) => ('state, (. 'action) => unit) = "useReducer" @module("react") - external useCallback: 'f => 'f = "useCallback" + external useCallback: ('f, 'deps) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - @module("react") + @module("react") @deprecated("Please use the useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } From 2c40d7ed6155841d02231944ed4d2cc211f1b815 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 19:27:13 +0900 Subject: [PATCH 07/13] changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28acf7b..9541356 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,11 +19,13 @@ #### :boom: Breaking Change - Requires ReScript 11.0.0-alpha.6 or newer. +- Deprecated useCallbackN functions in favor of changing `useCallback` signature. (`useCallback: 'f => 'f` -> `useCallback: ('f, 'deps) => 'f`) + - Use useCallback instead of useCallbackN. e.g. `useCallback3(f, (a, b, c))` -> `useCallback(f, (a, b, c))` + - With this change, it is now possible to pass any value as the second argument `'deps`, but you can still use tuples as before. It provides convenience and flexibility, especially in case of using more than 7 dependencies. #### :bug: Bug Fix - Fixed children type for `Fragment`, `StrictMode` and `Suspense`. -- Fixed the incorrect type definitions for `React.useCallback` #### :nail_care: Polish From 0ea62b1df39331653ec29510e9854805bc2f357e Mon Sep 17 00:00:00 2001 From: woonki Date: Tue, 23 May 2023 21:37:39 +0900 Subject: [PATCH 08/13] Update CHANGELOG.md Co-authored-by: Christoph Knittel --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9541356..f0d8e9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,10 @@ - Requires ReScript 11.0.0-alpha.6 or newer. - Deprecated useCallbackN functions in favor of changing `useCallback` signature. (`useCallback: 'f => 'f` -> `useCallback: ('f, 'deps) => 'f`) - Use useCallback instead of useCallbackN. e.g. `useCallback3(f, (a, b, c))` -> `useCallback(f, (a, b, c))` - - With this change, it is now possible to pass any value as the second argument `'deps`, but you can still use tuples as before. It provides convenience and flexibility, especially in case of using more than 7 dependencies. + - With this change, it is now possible to pass any value as the second argument `'deps`. In case you pass an invalid value, you will get a warning from React at runtime. You should be using one of the following values for the dependency array: + - 0 dependencies: `[]` + - 1 dependency: `[a]` + - more than 1 dependency: `(a, b, ...)` #### :bug: Bug Fix From 70c1ea5d19068b28f67a4f9aec058639bc619071 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Tue, 23 May 2023 21:39:34 +0900 Subject: [PATCH 09/13] fix deprecation message --- src/React.res | 32 ++++++++++++++++---------------- src/v3/React_V3.res | 32 ++++++++++++++++---------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/React.res b/src/React.res index 81a9364..48e3b0e 100644 --- a/src/React.res +++ b/src/React.res @@ -243,28 +243,28 @@ external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'a @module("react") external useCallback: ('f, 'deps) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") @@ -403,28 +403,28 @@ module Uncurried = { @module("react") external useCallback: ('f, 'deps) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index ca9cde6..829dbda 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -243,28 +243,28 @@ external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'a @module("react") external useCallback: ('f, 'deps) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" -@module("react") @deprecated("Please use the useCallback instead") +@module("react") @deprecated("Please use useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" @module("react") @@ -349,28 +349,28 @@ module Uncurried = { @module("react") external useCallback: ('f, 'deps) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback0: ('f, @as(json`[]`) _) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback1: ('f, array<'a>) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback2: ('f, ('a, 'b)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback3: ('f, ('a, 'b, 'c)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback4: ('f, ('a, 'b, 'c, 'd)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback5: ('f, ('a, 'b, 'c, 'd, 'e)) => 'f = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback6: ('callback, ('a, 'b, 'c, 'd, 'e, 'f)) => 'callback = "useCallback" - @module("react") @deprecated("Please use the useCallback instead") + @module("react") @deprecated("Please use useCallback instead") external useCallback7: ('callback, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'callback = "useCallback" } From 1645b13f144d7dc7180d2be5e48fa63dca541762 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Wed, 24 May 2023 15:47:00 +0900 Subject: [PATCH 10/13] onEveryRender hooks binding --- CHANGELOG.md | 6 ++- src/React.res | 90 ++++++++++++++++++++++++++++++++------------- src/v3/React_V3.res | 77 +++++++++++++++++++++++++------------- 3 files changed, 120 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0d8e9f..977b47a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,12 +19,14 @@ #### :boom: Breaking Change - Requires ReScript 11.0.0-alpha.6 or newer. -- Deprecated useCallbackN functions in favor of changing `useCallback` signature. (`useCallback: 'f => 'f` -> `useCallback: ('f, 'deps) => 'f`) - - Use useCallback instead of useCallbackN. e.g. `useCallback3(f, (a, b, c))` -> `useCallback(f, (a, b, c))` +- Deprecated use\*N functions in favor of changing the signature of the main hook function. + - For example, useEffect instead of useEffectN e.g. `useEffect3(f, (a, b, c))` -> `useEffect(f, (a, b, c))` + - The affected hooks include `useEffect`, `useLayoutEffect`, `useCallback`, `useMemo`, `useImperativeHandle`, `useInsertionEffect` - With this change, it is now possible to pass any value as the second argument `'deps`. In case you pass an invalid value, you will get a warning from React at runtime. You should be using one of the following values for the dependency array: - 0 dependencies: `[]` - 1 dependency: `[a]` - more than 1 dependency: `(a, b, ...)` + - In case of omitting dependency which means the effect is executed on every render, use \*onEveryRender functions. e.g. `useEffectOnEveryRender` #### :bug: Bug Fix diff --git a/src/React.res b/src/React.res index 48e3b0e..fe9eb88 100644 --- a/src/React.res +++ b/src/React.res @@ -157,87 +157,93 @@ external useReducerWithMapState: ( ) => ('state, 'action => unit) = "useReducer" @module("react") -external useEffect: (@uncurry (unit => option unit>)) => unit = "useEffect" +external useEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = "useEffect" @module("react") +external useEffect: (@uncurry (unit => option unit>), 'deps) => unit = "useEffect" +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect5: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect6: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect7: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f, 'g), ) => unit = "useEffect" @module("react") -external useLayoutEffect: (@uncurry (unit => option unit>)) => unit = "useLayoutEffect" +external useLayoutEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = + "useLayoutEffect" @module("react") +external useLayoutEffect: (@uncurry (unit => option unit>), 'deps) => unit = + "useLayoutEffect" +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect5: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect6: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f), ) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect7: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f, 'g), ) => unit = "useLayoutEffect" @module("react") -external useMemo: (@uncurry (unit => 'any)) => 'any = "useMemo" +external useMemo: (@uncurry (unit => 'any), 'deps) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo0: (@uncurry (unit => 'any), @as(json`[]`) _) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo1: (@uncurry (unit => 'any), array<'a>) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo2: (@uncurry (unit => 'any), ('a, 'b)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo3: (@uncurry (unit => 'any), ('a, 'b, 'c)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo4: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo5: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") @@ -273,6 +279,20 @@ external useContext: Context.t<'any> => 'any = "useContext" @module("react") external useRef: 'value => ref<'value> = "useRef" @module("react") +external useImperativeHandleOnEveryRender: ( + Js.Nullable.t>, + @uncurry (unit => 'value), +) => unit = "useImperativeHandle" + +@module("react") +external useImperativeHandle: ( + Js.Nullable.t>, + @uncurry (unit => 'value), + 'deps, +) => unit = "useImperativeHandle" + +@module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle0: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -280,6 +300,7 @@ external useImperativeHandle0: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle1: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -287,6 +308,7 @@ external useImperativeHandle1: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle2: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -294,6 +316,7 @@ external useImperativeHandle2: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle3: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -301,6 +324,7 @@ external useImperativeHandle3: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle4: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -308,6 +332,7 @@ external useImperativeHandle4: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle5: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -315,6 +340,7 @@ external useImperativeHandle5: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle6: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -322,6 +348,7 @@ external useImperativeHandle6: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle7: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -336,34 +363,45 @@ external useImperativeHandle7: ( external useTransition: unit => (bool, (. unit => unit) => unit) = "useTransition" @module("react") -external useInsertionEffect: (@uncurry (unit => option unit>)) => unit = +external useInsertionEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = + "useInsertionEffect" +@module("react") +external useInsertionEffect: (@uncurry (unit => option unit>), 'deps) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect5: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e), ) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect6: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f), ) => unit = "useInsertionEffect" @module("react") +@deprecated("Please use useInsertionEffect or useInsertionEffectOnEveryRender instead") external useInsertionEffect7: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f, 'g), diff --git a/src/v3/React_V3.res b/src/v3/React_V3.res index 829dbda..33c3efb 100644 --- a/src/v3/React_V3.res +++ b/src/v3/React_V3.res @@ -157,87 +157,93 @@ external useReducerWithMapState: ( ) => ('state, 'action => unit) = "useReducer" @module("react") -external useEffect: (@uncurry (unit => option unit>)) => unit = "useEffect" +external useEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = "useEffect" @module("react") +external useEffect: (@uncurry (unit => option unit>), 'deps) => unit = "useEffect" +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect5: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect6: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f)) => unit = "useEffect" -@module("react") +@module("react") @deprecated("Please use useEffect or useEffectOnEveryRender instead") external useEffect7: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f, 'g), ) => unit = "useEffect" @module("react") -external useLayoutEffect: (@uncurry (unit => option unit>)) => unit = "useLayoutEffect" +external useLayoutEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = + "useLayoutEffect" @module("react") +external useLayoutEffect: (@uncurry (unit => option unit>), 'deps) => unit = + "useLayoutEffect" +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect5: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e)) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect6: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f), ) => unit = "useLayoutEffect" -@module("react") +@module("react") @deprecated("Please use useLayoutEffect or useLayoutEffectOnEveryRender instead") external useLayoutEffect7: ( @uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f, 'g), ) => unit = "useLayoutEffect" @module("react") -external useMemo: (@uncurry (unit => 'any)) => 'any = "useMemo" +external useMemo: (@uncurry (unit => 'any), 'deps) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo0: (@uncurry (unit => 'any), @as(json`[]`) _) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo1: (@uncurry (unit => 'any), array<'a>) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo2: (@uncurry (unit => 'any), ('a, 'b)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo3: (@uncurry (unit => 'any), ('a, 'b, 'c)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo4: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo5: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = "useMemo" -@module("react") +@module("react") @deprecated("Please use useMemo instead") external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") @@ -273,6 +279,20 @@ external useContext: Context.t<'any> => 'any = "useContext" @module("react") external useRef: 'value => ref<'value> = "useRef" @module("react") +external useImperativeHandleOnEveryRender: ( + Js.Nullable.t>, + @uncurry (unit => 'value), +) => unit = "useImperativeHandle" + +@module("react") +external useImperativeHandle: ( + Js.Nullable.t>, + @uncurry (unit => 'value), + 'deps, +) => unit = "useImperativeHandle" + +@module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle0: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -280,6 +300,7 @@ external useImperativeHandle0: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle1: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -287,6 +308,7 @@ external useImperativeHandle1: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle2: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -294,6 +316,7 @@ external useImperativeHandle2: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle3: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -301,6 +324,7 @@ external useImperativeHandle3: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle4: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -308,6 +332,7 @@ external useImperativeHandle4: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle5: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -315,6 +340,7 @@ external useImperativeHandle5: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle6: ( Js.Nullable.t>, @uncurry (unit => 'value), @@ -322,6 +348,7 @@ external useImperativeHandle6: ( ) => unit = "useImperativeHandle" @module("react") +@deprecated("Please use useImperativeHandle or useImperativeHandleOnEveryRender instead") external useImperativeHandle7: ( Js.Nullable.t>, @uncurry (unit => 'value), From fcc50d7fc69c7f55de5a5047d67ba29dc8fd2cf3 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Wed, 24 May 2023 16:58:31 +0900 Subject: [PATCH 11/13] useEffectOnEveryRender in router --- src/RescriptReactRouter.bs.js | 32 ++++++++++++++++---------------- src/RescriptReactRouter.res | 5 +++-- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/RescriptReactRouter.bs.js b/src/RescriptReactRouter.bs.js index de69385..123ab17 100644 --- a/src/RescriptReactRouter.bs.js +++ b/src/RescriptReactRouter.bs.js @@ -191,22 +191,22 @@ function useUrl(serverUrl, param) { }); var setUrl = match[1]; var url$1 = match[0]; - React.useEffect((function (param) { - var watcherId = watchUrl(function (url) { - Curry._1(setUrl, (function (param) { - return url; - })); - }); - var newUrl = url(undefined, undefined); - if (urlNotEqual(newUrl, url$1)) { - Curry._1(setUrl, (function (param) { - return newUrl; - })); - } - return (function (param) { - unwatchUrl(watcherId); - }); - }), []); + React.useEffect(function (param) { + var watcherId = watchUrl(function (url) { + Curry._1(setUrl, (function (param) { + return url; + })); + }); + var newUrl = url(undefined, undefined); + if (urlNotEqual(newUrl, url$1)) { + Curry._1(setUrl, (function (param) { + return newUrl; + })); + } + return (function (param) { + unwatchUrl(watcherId); + }); + }); return url$1; } diff --git a/src/RescriptReactRouter.res b/src/RescriptReactRouter.res index 6560dfc..f410c26 100644 --- a/src/RescriptReactRouter.res +++ b/src/RescriptReactRouter.res @@ -62,7 +62,8 @@ let arrayToList = a => { let pathParse = str => switch str { | "" - | "/" => list{} + | "/" => + list{} | raw => /* remove the preceeding /, which every pathname seems to have */ let raw = Js.String.sliceToEnd(~from=1, raw) @@ -190,7 +191,7 @@ let useUrl = (~serverUrl=?, ()) => { } ) - React.useEffect0(() => { + React.useEffectOnEveryRender(() => { let watcherId = watchUrl(url => setUrl(_ => url)) // check for updates that may have occured between the initial state and From 40ba48d063df80fc5075ef038c150a5aef713ad6 Mon Sep 17 00:00:00 2001 From: Woonki Moon Date: Wed, 24 May 2023 17:28:18 +0900 Subject: [PATCH 12/13] fix useEffect in router --- src/RescriptReactRouter.bs.js | 32 ++++++++++++++++---------------- src/RescriptReactRouter.res | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/RescriptReactRouter.bs.js b/src/RescriptReactRouter.bs.js index 123ab17..de69385 100644 --- a/src/RescriptReactRouter.bs.js +++ b/src/RescriptReactRouter.bs.js @@ -191,22 +191,22 @@ function useUrl(serverUrl, param) { }); var setUrl = match[1]; var url$1 = match[0]; - React.useEffect(function (param) { - var watcherId = watchUrl(function (url) { - Curry._1(setUrl, (function (param) { - return url; - })); - }); - var newUrl = url(undefined, undefined); - if (urlNotEqual(newUrl, url$1)) { - Curry._1(setUrl, (function (param) { - return newUrl; - })); - } - return (function (param) { - unwatchUrl(watcherId); - }); - }); + React.useEffect((function (param) { + var watcherId = watchUrl(function (url) { + Curry._1(setUrl, (function (param) { + return url; + })); + }); + var newUrl = url(undefined, undefined); + if (urlNotEqual(newUrl, url$1)) { + Curry._1(setUrl, (function (param) { + return newUrl; + })); + } + return (function (param) { + unwatchUrl(watcherId); + }); + }), []); return url$1; } diff --git a/src/RescriptReactRouter.res b/src/RescriptReactRouter.res index f410c26..24e3222 100644 --- a/src/RescriptReactRouter.res +++ b/src/RescriptReactRouter.res @@ -191,7 +191,7 @@ let useUrl = (~serverUrl=?, ()) => { } ) - React.useEffectOnEveryRender(() => { + React.useEffect(() => { let watcherId = watchUrl(url => setUrl(_ => url)) // check for updates that may have occured between the initial state and @@ -202,7 +202,7 @@ let useUrl = (~serverUrl=?, ()) => { } Some(() => unwatchUrl(watcherId)) - }) + }, []) url } From 358b46225cda8bf3e58bf40ccb693bd80a7ee643 Mon Sep 17 00:00:00 2001 From: woonki Date: Wed, 24 May 2023 17:29:15 +0900 Subject: [PATCH 13/13] Update CHANGELOG.md Co-authored-by: Christoph Knittel --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 977b47a..6428fcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,7 @@ - 0 dependencies: `[]` - 1 dependency: `[a]` - more than 1 dependency: `(a, b, ...)` - - In case of omitting dependency which means the effect is executed on every render, use \*onEveryRender functions. e.g. `useEffectOnEveryRender` +- For calling `useEffect`, `useLayoutEffect` etc. *without* a dependency array (meaning that the effect is executed on every render), there are now separate bindings `useEffectOnEveryRender`, `useLayoutEffectOnEveryRender` etc. #### :bug: Bug Fix