useDetectOutsideClick

js·2022년 8월 22일
0

커스텀훅

목록 보기
1/1

타켓을 제외환 타켓의 외부가 클릭 되면,

타켓의 active 상태를 변화시키는 훅

import { useState, useEffect } from 'react';

export const useDetectOutsideClick = (targetRef, initialState) => {
  const [isActive, setIsActive] = useState(initialState);

  useEffect(() => {
    const onClick = ({ target }) => {
      if (targetRef.current !== null && !targetRef.current.contains(target)) {
        setIsActive(!isActive);
      }
    };

    if (isActive) {
      window.addEventListener('click', onClick);
    }

    return () => {
      window.removeEventListener('click', onClick);
    };
  }, [isActive, targetRef]);

  return [isActive, setIsActive];
};

0개의 댓글