useOutsidePointerDown
특정 요소 외부에서 마우스 또는 터치 이벤트가 발생할 때 호출되는 콜백을 등록하는 커스텀 훅입니다.
지정된 요소(ref로 지정된 요소) 외부에서 사용자가 마우스를 클릭하거나, 터치 이벤트가 발생할 때마다 제공된 callback 함수를 호출합니다.
모바일 환경에서는 touchstart, 데스크탑 환경에서는 mousedown 이벤트를 감지합니다.
Code
Interface
typescript
function useOutsidePointerDown<T extends HTMLElement>(
callback: (targetElement: T) => void,
options?: {
excludeRefs: React.RefObject<HTMLElement>[];
}
): { ref: React.RefObject<T> };
Usage
typescript
import { useMemo, useState } from 'react';
import { useOutsidePointerDown } from '@modern-kit/react';
const Example = () => {
const [number, setNumber] = useState(0);
const excludeRef = useRef<HTMLDivElement>(null);
const targetRef = useOutsidePointerDown<HTMLDivElement>(() => {
setNumber(number + 1);
}, {
excludeRefs: [excludeRef], // 외부 클릭 및 터치 감지를 제외할 요소의 ref 배열입니다.
});
const outerBoxStyle = useMemo(() => {
return { /* ... */ };
}, []);
const InnerBoxStyle = useMemo(() => {
return { /* ... */ };
}, []);
const ExcludeBoxStyle = useMemo(() => {
return { /* ... */ };
}, []);
return (
<div style={outerBoxStyle}>
<h3>Target Box 외부를 클릭해보세요!<br />(Exclude Box는 클릭 감지에 제외됩니다.)</h3>
<p>number: {number}</p>
<div ref={targetRef} style={InnerBoxStyle}>
<h3>Target Box</h3>
</div>
<div ref={excludeRef} style={ExcludeBoxStyle}>
<h3>Exclude Box</h3>
</div>
</div>
);
};