From 5e4fd99f53e88ce01be66a00090c8810b3972037 Mon Sep 17 00:00:00 2001 From: eunwoo-levi Date: Fri, 13 Mar 2026 05:46:36 +0900 Subject: [PATCH 1/6] fix(core): use named function in useEffect of usePreservedCallback --- .../hooks/usePreservedCallback/usePreservedCallback.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/core/src/hooks/usePreservedCallback/usePreservedCallback.ts b/packages/core/src/hooks/usePreservedCallback/usePreservedCallback.ts index 7ed03200..4cd2190d 100644 --- a/packages/core/src/hooks/usePreservedCallback/usePreservedCallback.ts +++ b/packages/core/src/hooks/usePreservedCallback/usePreservedCallback.ts @@ -32,9 +32,12 @@ export function usePreservedCallback { - callbackRef.current = callback; - }, [callback]); + useEffect( + function syncCallbackRef() { + callbackRef.current = callback; + }, + [callback] + ); return useCallback((...args: Arguments) => { return callbackRef.current(...args); From 967a2d9cdd2f8b436c7f3cea9766a9e306bc8727 Mon Sep 17 00:00:00 2001 From: eunwoo-levi Date: Fri, 13 Mar 2026 05:46:42 +0900 Subject: [PATCH 2/6] fix(core): use named function in useEffect of useInterval --- .../core/src/hooks/useInterval/useInterval.ts | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/core/src/hooks/useInterval/useInterval.ts b/packages/core/src/hooks/useInterval/useInterval.ts index e5017833..301df694 100644 --- a/packages/core/src/hooks/useInterval/useInterval.ts +++ b/packages/core/src/hooks/useInterval/useInterval.ts @@ -46,18 +46,24 @@ export function useInterval(callback: () => void, options: IntervalOptions) { const preservedCallback = usePreservedCallback(callback); - useEffect(() => { - if (immediate === true && enabled) { - preservedCallback(); - } - }, [immediate, preservedCallback, enabled]); + useEffect( + function runImmediateCallback() { + if (immediate === true && enabled) { + preservedCallback(); + } + }, + [immediate, preservedCallback, enabled] + ); - useEffect(() => { - if (!enabled) { - return; - } + useEffect( + function startInterval() { + if (!enabled) { + return; + } - const id = setInterval(preservedCallback, delay); - return () => clearInterval(id); - }, [delay, preservedCallback, enabled]); + const id = setInterval(preservedCallback, delay); + return () => clearInterval(id); + }, + [delay, preservedCallback, enabled] + ); } From 9b26bc7878f7b0c16b45d01dde5671b43ecfb5b8 Mon Sep 17 00:00:00 2001 From: eunwoo-levi Date: Fri, 13 Mar 2026 05:46:49 +0900 Subject: [PATCH 3/6] fix(core): use named function in useEffect of useDebounce --- packages/core/src/hooks/useDebounce/useDebounce.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/core/src/hooks/useDebounce/useDebounce.ts b/packages/core/src/hooks/useDebounce/useDebounce.ts index 4cc9c101..128005b2 100644 --- a/packages/core/src/hooks/useDebounce/useDebounce.ts +++ b/packages/core/src/hooks/useDebounce/useDebounce.ts @@ -73,11 +73,14 @@ export function useDebounce unknown>( return debounce(preservedCallback, wait, { edges }); }, [preservedCallback, wait, edges]); - useEffect(() => { - return () => { - debounced.cancel(); - }; - }, [debounced]); + useEffect( + function cancelDebouncedOnUnmount() { + return () => { + debounced.cancel(); + }; + }, + [debounced] + ); return debounced; } From 38251886e863bf42e0716be963e278fe60d7c746 Mon Sep 17 00:00:00 2001 From: eunwoo-levi Date: Fri, 13 Mar 2026 05:46:54 +0900 Subject: [PATCH 4/6] fix(core): use named function in useEffect of useDebouncedCallback --- .../core/src/hooks/useDebouncedCallback/useDebouncedCallback.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/hooks/useDebouncedCallback/useDebouncedCallback.ts b/packages/core/src/hooks/useDebouncedCallback/useDebouncedCallback.ts index 1ffa16b8..6ffce00d 100644 --- a/packages/core/src/hooks/useDebouncedCallback/useDebouncedCallback.ts +++ b/packages/core/src/hooks/useDebouncedCallback/useDebouncedCallback.ts @@ -42,7 +42,7 @@ export function useDebouncedCallback({ const handleChange = usePreservedCallback(onChange); const ref = useRef({ value: false, clearPreviousDebounce: () => {} }); - useEffect(() => { + useEffect(function clearDebouncedOnUnmount() { const current = ref.current; return () => { current.clearPreviousDebounce(); From 7e1b454c7977fd04724b7ed8364a057b4dec1b77 Mon Sep 17 00:00:00 2001 From: eunwoo-levi Date: Fri, 13 Mar 2026 05:47:00 +0900 Subject: [PATCH 5/6] fix(core): use named function in useEffect of useLoading --- packages/core/src/hooks/useLoading/useLoading.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/core/src/hooks/useLoading/useLoading.ts b/packages/core/src/hooks/useLoading/useLoading.ts index eb877bf7..8c09029f 100644 --- a/packages/core/src/hooks/useLoading/useLoading.ts +++ b/packages/core/src/hooks/useLoading/useLoading.ts @@ -58,12 +58,15 @@ export function useLoading(): [boolean, (promise: Promise) => Promise] function useIsMountedRef() { const ref = useRef({ isMounted: true }).current; - useEffect(() => { - ref.isMounted = true; - return () => { - ref.isMounted = false; - }; - }, [ref]); + useEffect( + function trackMountedState() { + ref.isMounted = true; + return () => { + ref.isMounted = false; + }; + }, + [ref] + ); return ref; } From 79d73ca789b418e309ca41fc94b0b148a26d71f5 Mon Sep 17 00:00:00 2001 From: eunwoo-levi Date: Tue, 17 Mar 2026 23:01:15 +0900 Subject: [PATCH 6/6] chore: add changeset for useEffect named function fix --- .changeset/pretty-candles-wink.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pretty-candles-wink.md diff --git a/.changeset/pretty-candles-wink.md b/.changeset/pretty-candles-wink.md new file mode 100644 index 00000000..87467ff6 --- /dev/null +++ b/.changeset/pretty-candles-wink.md @@ -0,0 +1,5 @@ +--- +'react-simplikit': patch +--- + +use named functions in useEffect callbacks for better stack traces