안녕하세요
리액트 - 모달 창 바깥 클릭하면 창 닫기 본문
글 제목 입력창 클릭 시 글 내용 입력창이 나타나도록 하였다.
<Stack className="writeForm"
direction="horizontal"
onClick={() => setIsContentInputVisible(true)}
direction="horizontal"
onClick={() => setIsContentInputVisible(true)}
useRef를 이용해서 input을 감싼 박스를 선택한다.
const contentInputNode = useRef();
<Stack className="writeForm"
direction="horizontal"
onClick={() => setIsContentInputVisible(true)}
ref={contentInputNode}>
useEffect로 document에 mousedown 이벤트를 생성한다.
클릭 이벤트가 실행되며 모달창이 나타날 때
=> (onClick={() => setIsContentInputVisible(true))
mousedown이 함께 실행되고,
=> (document.addEventListener("mousedown", clickOutside))
클릭한 node가 form을 포함하고 있지 않다면 창을 모달창이 닫히게 된다.
=> (!contentInputNode.current.contains(e.target))
useEffect(() => {
// 모달이 열려 있고 모달의 바깥쪽을 눌렀을 때 창 닫기
const clickOutside = (e) => {
if (isContentInputVisible && !contentInputNode.current.contains(e.target)) {
setIsContentInputVisible(false);
}
};
document.addEventListener("mousedown", clickOutside);
return () => {
// Cleanup the event listener
document.removeEventListener("mousedown", clickOutside);
};
}, [isContentInputVisible]);
https://tilnote.io/pages/623eefea74b8f48522c984a5
'스터디 > 코딩애플' 카테고리의 다른 글
MongoDB - 게시물 번호 부여, 관계형 데이터 베이스 (0) | 2023.01.01 |
---|---|
MongoDB - 데이터베이스에 데이터 추가하기 (0) | 2022.12.31 |
MongoDB - Atlas 무료 데이터베이스 연결하기 (0) | 2022.12.31 |
MongoDB - 서버를 만들어 GET POST 해보자 (0) | 2022.12.30 |
MongoDB - Node.js, 요청방식, API, REST API (0) | 2022.12.30 |