fix: useMousePosition can set state after component unmounted

fix: Clicking item in SubMenu does not close parent menu
This commit is contained in:
Tom Moor
2022-12-31 10:34:11 -05:00
parent e70f1ed84c
commit 575f70a9e2
5 changed files with 41 additions and 31 deletions

View File

@@ -1,6 +1,7 @@
import { throttle } from "lodash";
import * as React from "react";
import useEventListener from "./useEventListener";
import useIsMounted from "./useIsMounted";
/**
* Mouse position as a tuple of [x, y]
@@ -13,6 +14,7 @@ type MousePosition = [number, number];
* @returns Mouse position as a tuple of [x, y]
*/
export const useMousePosition = () => {
const isMounted = useIsMounted();
const [mousePosition, setMousePosition] = React.useState<MousePosition>([
0,
0,
@@ -21,9 +23,11 @@ export const useMousePosition = () => {
const updateMousePosition = React.useMemo(
() =>
throttle((ev: MouseEvent) => {
setMousePosition([ev.clientX, ev.clientY]);
if (isMounted()) {
setMousePosition([ev.clientX, ev.clientY]);
}
}, 200),
[]
[isMounted]
);
useEventListener("mousemove", updateMousePosition);