UNPKG

@jk-core/hooks

Version:
30 lines (25 loc) 908 B
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;