728x90
반응형
리액트에서 마우스가 브라우저 창 밖에 있는지 감지하고 싶다면
mouseenter, mouseleave 이벤트를 등록하여 hover 상태롤 확인하는 hook을 추가하면 간단하게 감지할 수 있다.
참고로 document.body 의 이벤트로 등록하여, html 의 body를 기준으로 마우스가 enter 인지 leave 인지로 판단해야 하는데
이것을 body가 아니라 현재 컴포넌트를 기준으로도 할 수는 있지만,
현재 컴포넌트가 자주 리렌더링이 되는 컴포넌트라면 예상했던 모습과 많이 다르게 동작할 수 있다.
계속 깜빡깜빡 거리는 식으로 동작할 수 있기 때문에, 어차피 창 전체를 기준으로 동작하는 기능이라면 body를 기준으로 하는게 편하다...
// useHoverWindow.ts
import { useEffect, useState } from 'react'
export const useHoverWindow = (): [boolean] => {
const [isHover, setIsHover] = useState<boolean>(false)
const handleMouseOver = () => {
setIsHover(true)
}
const handleMouseOut = () => {
setIsHover(false)
}
useEffect(() => {
document.body.addEventListener('mouseenter', handleMouseOver)
document.body.addEventListener('mouseleave', handleMouseOut)
return () => {
document.body.removeEventListener('mouseenter', handleMouseOver)
document.body.removeEventListener('mouseleave', handleMouseOut)
}
}, [])
return [isHover]
}
사용시
const [isHover] = useHoverWindow()
if(isHover){
// 마우스가 브라우저 창 안에 있음
}
반응형
'프론트엔드 개발 > React.js' 카테고리의 다른 글
CRA를 Vite로 마이그레이션 하기 (0) | 2023.01.15 |
---|---|
리액트에서 외부 링크 관리하기 (0) | 2023.01.15 |
리액트 장치 유형 감지하기 (0) | 2023.01.15 |
React Query onError 가 동작하지 않는 이슈 (0) | 2022.12.21 |
리액트 URL Hash기반의 서브페이지 관리 체계 도입 (0) | 2022.09.11 |