@jk-core/hooks
Version:
hooks for jk
30 lines (25 loc) • 908 B
text/typescript
import { RefObject, useEffect } from 'react';
interface Props {
targetRef: RefObject<HTMLElement | null>;
eventList: Array<string>;
handler: () => void;
}
// 설정한 컴포넌트 이외의 영역을 클릭할 경우 handler에 등록된 동작을 수행
const useInterectOutside = ({ targetRef, eventList = [], handler = () => {} }:Props) => {
useEffect(() => {
const handleClickOutside = (event:Event) => {
if (targetRef.current && !targetRef.current.contains(event.target as Node)) {
handler();
}
};
if (Array.isArray(eventList)) {
eventList.map((event) => window.addEventListener(event, handleClickOutside));
}
return () => {
if (Array.isArray(eventList)) {
eventList.map((event) => window.removeEventListener(event, handleClickOutside));
}
};
}, [targetRef, handler, eventList]);
};
export default useInterectOutside;