fix: useMousePosition can set state after component unmounted
fix: Clicking item in SubMenu does not close parent menu
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user