React.js
[React] 모달 영역 외부 클릭시 모달 닫기
Chunho
2022. 7. 5. 12:54
const [modalOpen, setModalOpen] = useState<boolean>(false)
const el = useRef()
useEffect(() => {
window.addEventListener('click', handleCloseModal)
return () => {
window.removeEventListener('click', handleCloseModal)
}
}, [modalOpen])
const handleCloseModal = (e: MouseEvent) => {
if (modalOpen && e.target !== el.current) {
setModalOpen(false)
}
}
<HeaderModal open={modalOpen} close={closeModal} refData={el} /> //모달
모달 영역의 엘리먼트를 지정해주기 위해서는 useRef를 사용한다.
useRef를 사용해 모달 영역의 레퍼런스를 지정해준 뒤,
click 이벤트가 일어났을 때 모달이 열려있고 클릭한 부분이 모달 영역 밖이라면 모달창을 닫아주면 된다.
이 때 이벤트가 한 번 실행 된 후 이벤트를 삭제해줘야 다음 실행 시 정상적인 state 값을 받아온다.