Skip to content

Commit a70bc7f

Browse files
committed
feat: react hooks use hover mounted
1 parent ec67659 commit a70bc7f

3 files changed

Lines changed: 77 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { useEffect, useRef, useState } from 'react'
2+
3+
export default function useFocus<U extends HTMLElement>() {
4+
const [isFocusing, setIsFocusing] = useState(false)
5+
const ref = useRef<U>(null)
6+
7+
useEffect(() => {
8+
const element = ref.current
9+
if (!element) return
10+
11+
const handleFocus = () => {
12+
setIsFocusing(true)
13+
}
14+
const handleBlur = () => {
15+
setIsFocusing(false)
16+
}
17+
18+
element.addEventListener('focus', handleFocus)
19+
element.addEventListener('blur', handleBlur)
20+
21+
return () => {
22+
if (element) {
23+
element.removeEventListener('focus', handleFocus)
24+
element.removeEventListener('blur', handleBlur)
25+
}
26+
}
27+
}, [ref])
28+
29+
return { isFocusing, ref }
30+
}
31+
32+
// const { ref: focusRef, isFocusing } = useFocus<HTMLInputElement>();
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { useEffect, useRef, useState } from 'react'
2+
3+
export default function useHover<U extends HTMLElement>() {
4+
const [isHovering, setIsHovering] = useState(false)
5+
const ref = useRef<U>(null)
6+
7+
useEffect(() => {
8+
const element = ref.current
9+
if (!element) return
10+
11+
const handleMouseEnter = () => {
12+
setIsHovering(true)
13+
}
14+
const handleMouseLeave = () => {
15+
setIsHovering(false)
16+
}
17+
18+
element.addEventListener('mouseenter', handleMouseEnter)
19+
element.addEventListener('mouseleave', handleMouseLeave)
20+
21+
return () => {
22+
if (element) {
23+
element.removeEventListener('mouseenter', handleMouseEnter)
24+
element.removeEventListener('mouseleave', handleMouseLeave)
25+
}
26+
}
27+
}, [ref])
28+
29+
return { isHovering, ref }
30+
}
31+
32+
// const { ref: hoverRef, isHovering } = useHover<HTMLDivElement>();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { useEffect, useState } from 'react'
2+
3+
export default function useMounted() {
4+
const [mounted, setMounted] = useState(false)
5+
6+
useEffect(() => {
7+
setMounted(true)
8+
}, [])
9+
10+
return mounted
11+
}
12+
13+
// const mounted = useMounted();

0 commit comments

Comments
 (0)