MCPcopy Create free account
hub / github.com/primer/react / useSafeTimeout

Function useSafeTimeout

packages/react/src/hooks/useSafeTimeout.ts:11–38  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

9 * This hook ensures that all timeouts are cleared when the component unmounts.
10 */
11export default function useSafeTimeout(): {safeSetTimeout: SetTimeout; safeClearTimeout: ClearTimeout} {
12 const timers = useRef<Set<number>>(new Set<number>())
13
14 const safeSetTimeout = useCallback(
15 (handler: TimerHandler, timeout?: number | undefined, ...args: unknown[]): number => {
16 const id = window.setTimeout(handler, timeout, ...args)
17 timers.current.add(id)
18 return id
19 },
20 [],
21 )
22
23 const safeClearTimeout = useCallback((id: number) => {
24 clearTimeout(id)
25 timers.current.delete(id)
26 }, [])
27
28 useEffect(() => {
29 return () => {
30 // eslint-disable-next-line react-hooks/exhaustive-deps
31 for (const id of timers.current) {
32 clearTimeout(id)
33 }
34 }
35 }, [])
36
37 return {safeSetTimeout, safeClearTimeout}
38}

Callers 4

SubTreeFunction · 0.85
useTypeaheadFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected