Skip to content

Commit a346f04

Browse files
committed
๐Ÿ“ docs: useEventListener ๋ฌธ์„œ ์ถ”๊ฐ€
1 parent 165b922 commit a346f04

File tree

3 files changed

+75
-10
lines changed

3 files changed

+75
-10
lines changed

โ€Ždocs/pages/hooks/_meta.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
"useDeepCompareEffect": "useDeepCompareEffect",
66
"useDelayFlag": "useDelayFlag",
77
"useDetectDevice": "useDetectDevice",
8+
"useEventListener": "useEventListener",
89
"useGeolocation": "useGeolocation",
910
"useHover": "useHover",
11+
"useIntersectionObserver": "useIntersectionObserver",
1012
"useInterval": "useInterval",
1113
"useKeyCombination": "useKeyCombination",
14+
"useKeyDown": "useKeyDown",
1215
"useLongPress": "useLongPress",
1316
"useMousePosition": "useMousePosition",
14-
"useIntersectionObserver": "useIntersectionObserver",
1517
"useOnlineStatus": "useOnlineStatus",
18+
"useOutsideClick": "useOutsideClick",
1619
"usePrefersColorScheme": "usePrefersColorScheme",
1720
"usePreventCopy": "usePreventCopy",
1821
"useScrollLock": "useScrollLock",
@@ -22,8 +25,6 @@
2225
"useToggle": "useToggle",
2326
"useTranslation": "useTranslation",
2427
"useUnmountEffect": "useUnmountEffect",
25-
"useOutsideClick": "useOutsideClick",
26-
"useKeyDown": "useKeyDown",
2728
"_template": {
2829
"display": "hidden"
2930
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# useEventListener
2+
3+
## Introduce
4+
5+
ํŠน์ • ๊ฐ์ฒด์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ›…์ž…๋‹ˆ๋‹ค.
6+
7+
```ts
8+
export type EventMap = {
9+
window: WindowEventMap;
10+
document: DocumentEventMap;
11+
htmlElement: HTMLElementEventMap;
12+
svgElement: SVGElementEventMap;
13+
};
14+
15+
export type EventElement = {
16+
window: Window;
17+
document: Document;
18+
htmlElement: RefObject<HTMLElement> | HTMLElement;
19+
svgElement: RefObject<SVGElement> | SVGElement;
20+
};
21+
22+
const useEventListener = <
23+
K extends keyof EventMap,
24+
E extends keyof EventMap[K] & string,
25+
>(
26+
eventName: E,
27+
handler: (event: EventMap[K][E]) => void,
28+
element?: EventElement[K] | null,
29+
options?: AddEventListenerOptions
30+
): void
31+
```
32+
33+
- ํ˜„์žฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋Š” `window`, `document`, `htmlElement`, `svgElement` 4๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
34+
35+
### Props
36+
37+
- `eventName`: ์ถ”๊ฐ€ํ•  ์ด๋ฒคํŠธ์˜ ์ด๋ฆ„
38+
- `handler`: ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜
39+
- `element`: ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋Œ€์ƒ Element
40+
- default: `window`
41+
- `options`: ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๊ธฐ๋ณธ ์˜ต์…˜
42+
43+
{/* ํ›… ์‚ฌ์šฉ์ค‘์— ๋กœ๊ทธ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ Callout type="warning"์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. */}
44+
45+
## Examples
46+
47+
```tsx copy filename="TestComponent.tsx"
48+
import { useEventListener } from '@frontend-opensource/use-react-hooks';
49+
50+
const TestComponent = () => {
51+
const buttonRef = useRef<HTMLButtonElement>(null);
52+
53+
const handleClick = () => {
54+
console.log('Button clicked!');
55+
};
56+
57+
useEventListener('click', handleClick, buttonRef);
58+
59+
return (
60+
<div>
61+
<button ref={buttonRef}>Click</button>
62+
</div>
63+
);
64+
};
65+
```

โ€Žsrc/hooks/useEventListener/useEventListener.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ import { isClient } from '@/utils';
33
import { EventMap, EventElement } from './type';
44

55
/**
6-
* ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ›….
6+
* ํŠน์ • ๊ฐ์ฒด์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ›…
77
*
8-
* @param {E} eventName - ์ถ”๊ฐ€ํ•  ์ด๋ฒคํŠธ์˜ ์ด๋ฆ„.
9-
* @param {(event: EventMap[K][E]) => void} handler - ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜.
10-
* @param {EventElement[K] | null} [element=window] - ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋Œ€์ƒ Element, ๊ธฐ๋ณธ๊ฐ’์€ window.
11-
* @param {AddEventListenerOptions} [options] - ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๊ธฐ๋ณธ ์˜ต์…˜.
8+
* @param {E} eventName - ์ถ”๊ฐ€ํ•  ์ด๋ฒคํŠธ์˜ ์ด๋ฆ„
9+
* @param {(event: EventMap[K][E]) => void} handler - ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
10+
* @param {EventElement[K] | null} [element=window] - ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋Œ€์ƒ Element, ๊ธฐ๋ณธ๊ฐ’์€ window
11+
* @param {AddEventListenerOptions} [options] - ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๊ธฐ๋ณธ ์˜ต์…˜
1212
*
1313
* @description
14-
* ์ง€์ •๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ œ๊ณต๋œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
15-
* ๊ฐ€๋Šฅํ•œ Element๋กœ window, document, htmlElement, svgElement
14+
* ํ˜„์žฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋Š” `window`, `document`, `htmlElement`, `svgElement` 4๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
1615
*/
1716

1817
function useEventListener<

0 commit comments

Comments
ย (0)