fix: Warning setState after unmounted

This commit is contained in:
Tom Moor
2023-10-14 17:26:28 -04:00
parent 02731e73c5
commit 1305e3746b

View File

@@ -1,6 +1,7 @@
import throttle from "lodash/throttle"; import throttle from "lodash/throttle";
import * as React from "react"; import * as React from "react";
import { Minute } from "@shared/utils/time"; import { Minute } from "@shared/utils/time";
import useIsMounted from "./useIsMounted";
const activityEvents = [ const activityEvents = [
"click", "click",
@@ -25,6 +26,7 @@ export default function useIdle(
timeToIdle: number = 3 * Minute, timeToIdle: number = 3 * Minute,
events = activityEvents events = activityEvents
) { ) {
const isMounted = useIsMounted();
const [isIdle, setIsIdle] = React.useState(false); const [isIdle, setIsIdle] = React.useState(false);
const timeout = React.useRef<ReturnType<typeof setTimeout>>(); const timeout = React.useRef<ReturnType<typeof setTimeout>>();
@@ -40,8 +42,10 @@ export default function useIdle(
React.useEffect(() => { React.useEffect(() => {
const handleUserActivityEvent = throttle(() => { const handleUserActivityEvent = throttle(() => {
setIsIdle(false); if (isMounted()) {
onActivity(); setIsIdle(false);
onActivity();
}
}, 1000); }, 1000);
events.forEach((eventName) => events.forEach((eventName) =>
@@ -52,7 +56,7 @@ export default function useIdle(
window.removeEventListener(eventName, handleUserActivityEvent) window.removeEventListener(eventName, handleUserActivityEvent)
); );
}; };
}, [events, onActivity]); }, [events, isMounted, onActivity]);
return isIdle; return isIdle;
} }