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 값을 받아온다.
'React.js' 카테고리의 다른 글
[React] useQuery Hook이 반환하는 데이터 타입에 undefined가 포함되어있는 이슈 (0) | 2022.08.05 |
---|---|
[React] 모달 창 닫힐때 Animation 주기 (0) | 2022.07.05 |
[React] React-router-dom v6 params 사용 및 뒤로가기 (0) | 2022.06.28 |
[React] html 태그가 적용된 상태로 텍스트 나타내기 (0) | 2022.06.08 |
[React] Enter 입력시 Event 발생시키기 (0) | 2022.05.31 |