React 自定义 Hook 监听鼠标左键按下和抬起(含源码)
在 React 项目中,我们经常需要监听用户的鼠标行为,比如检测左键是否按下、是否抬起,以实现拖拽、绘图或交互特效等功能。
本篇文章将通过两个简单的自定义 Hook:useMouseDown
和 useMouseUp
,实现对鼠标左键的监听。同时还会讨论如何优化代码结构,让 Hook 更易维护和复用。
📦 1. 示例源码
下面是完整代码示例:
复制
import { useState, useCallback, useEffect } from "react";
export const useMouseDown = (fn?: () => void) => {
const [mouseDown, setMouseDown] = useState(false);
const handleMouseDown = useCallback((event: MouseEvent) => {
if (event.button === 0) {
setMouseDown(true);
fn?.();
}
}, [fn]);
useEffect(() => {
window.addEventListener("mousedown", handleMouseDown);
return () => window.removeEventListener("mousedown", handleMouseDown);
}, [handleMouseDown]);
return [mouseDown, setMouseDown] as const;
};
export const useMouseUp = (fn?: () => void) => {
const [mouseUp, setMouseUp] = useState(false);
const handleMouseUp = useCallback((event: MouseEvent) => {
if (event.button === 0) {
setMouseUp(true);
fn?.();
}
}, [fn]);
useEffect(() => {
window.addEventListener("mouseup", handleMouseUp);
return () => window.removeEventListener("mouseup", handleMouseUp);
}, [handleMouseUp]);
return [mouseUp, setMouseUp] as const;
};
🛠 2. 使用方法
只需在组件中调用:
复制
const [mouseDown] = useMouseDown(() => console.log("左键按下"));
const [mouseUp] = useMouseUp(() => console.log("左键抬起"));
✅ 总结
通过自定义 Hook,我可以轻松监听鼠标左键按下与抬起事件,减少冗余逻辑并提高代码可维护性。
相关文章
React 自定义 Hook 实现鼠标左键长按触发:https://blog.xn--rpv331d.com/%E6%9C%9B%E8%88%92/blog/76
作者:https://blog.xn--rpv331d.com/望舒
链接:https://blog.xn--rpv331d.com/望舒/blog/75
转载注意保留文章出处...
No data