• 모달창 외부 클릭 시 모달 닫기

    2023. 7. 30.

    by. JJo 😊

    React에서 지원하는 ref와 JavaScript의 EventListener를 사용하여 외부 클릭을 감지할 수 있다.

    🤔 ref란 ?

    ref 는 references 의 약자로,  React 에서 특정 컴퍼넌트를 접근하는 데에 사용하거나 값이 변해도 리렌더링하지 않도록 하는 변수로도 사용할 수 있다.

    useRef라는 훅을 사용하여 ref를 활용한다.

     

    📌 Hook기반의 컴포넌트로 구현하기

    const ref = useRef()를 통해 ref 객체를 반환하고, div 요소에 ref={ref}값을 연결해준다.
    이후 ref.current를 하면, 위에서 부여한 div 요소에 접근 가능한 id처럼 사용할 수 있다.

     

    컴포넌트의 외부 클릭을 감지하려면 아래와 같이 감지 여부 조건을 활용할 수 있다.

    if (!ref.current || ref.current.contains(e.target)) return;

    그리고 useEffect 안에서 등록한 이벤트는 컴포넌트의 마운트가 해제될 때 이벤트도 삭제되어 성능을 향상시킬 수 있도록 리턴 값 removeEventListener로 이벤트를 삭제해야 한다.

    useEffect(() => {
    	const listener = e => {
    		// 모달 안을 클릭했는지
    		if (!ref.current || ref.current.contains(e.target)) return;
    		// 모달 밖을 클릭했는지
    		handler();
    	};
    	document.addEventListener("mousedown", listener);
    	return () => {
    		document.removeEventListener("mousedown", listener);
    	};
    }, [ref, handler]);

     

     

    728x90

    'React' 카테고리의 다른 글

    CLSX 플러그인 사용법  (0) 2023.09.24
    React 컴포넌트에서 script 태그를 동적으로 삽입하기  (0) 2023.09.03
    리액트에서 애니메이션 효과 구현하기  (0) 2023.07.26
    useReducer, Context, Redux 차이  (0) 2022.11.16
    Jest  (0) 2022.11.10

    댓글