react 基础之自定义hooks (获取鼠标位置事件)

获取鼠标位置我们一般都是通过js事件获取,监听mousemove, 在每个页面中获取鼠标事件挺麻烦的,所以我们使用hooks, 简单封装一个react-hooks

js 复制代码
import { useCallback, useEffect, useState } from "react"

// 获取鼠标位置(自定义hooks)
function useMouse() {
    const [x, setX] = useState(0)
    const [y, setY] = useState(0)

    const mouseMoveHandler = useCallback((event: MouseEvent) => {
        setX(event.clientX)
        setY(event.clientY)
    }, [])

    useEffect(() => {
        window.addEventListener('mousemove', mouseMoveHandler)
        return () => {
            // 组件销毁时一定要解绑dom 事件,可能会出现内存泄露问题
            window.removeEventListener('mousemove', mouseMoveHandler)
        }
    })
    return { x, y }
}



// useEffect  会返回一个函数,这个返回函数代表的是组件销毁 可以做一些解绑操作
export default useMouse

使用方法:

js 复制代码
import useMouse from './hooks/useMouse';
 const { x, y } =  useMouse()

在上面的使用方法中x, y 表示的就是就是鼠标的位置

相关推荐
剑神一笑13 分钟前
从 JSON.parse 到树形视图:实现一个在线 JSON 格式化工具
前端·javascript·json
淸湫23 分钟前
JavaScript常用正则表达式大全
前端·javascript
脱缰胖虎24 分钟前
vue3+lodash+ts+tailwin 实现多行文本的展开收起代码(支持渲染html)
前端·vue.js
知了清语27 分钟前
我是怎么用 GPT-5.5 分析一个陌生项目源码的
前端
We་ct29 分钟前
LeetCode 64. 最小路径和:动态规划入门实战
开发语言·前端·算法·leetcode·typescript·动态规划
SparkleN.42 分钟前
mini-agent四个问题完善
前端·chrome·github
Dxy12393102161 小时前
Python设置Excel表格边框样式:从基础到高级
前端·python·excel
布列瑟农的星空1 小时前
tree shaking为什么失效
前端
idcu1 小时前
加入 Lyt.js:从第一行代码到核心贡献者
前端
肥羊zzz1 小时前
Vue2 vs Vue3 中 v-for 的 key 用法对比
前端·vue.js