기능 위주로 정리된 글
<button>열기</button>
<ModalBg>
<Modal>
모달 내용
<button>취소</button>
</Modal>
</ModalBg>
state
를 통해 지정모달이 열린 상태일 때는 modal state
를 true
로 하고 꺼진 상태일 때는 false
로 할 거다.
const [modal, setModal] = useState(false);
false
로 지정.<button onClick={ () => setModal(true) }>모달 열기</button>
setModal
함수를 통해서 true
로 state
업데이트modal state
값이 true
일 때 모달 렌더 1{
modal === true
?
<ModalBg>
<Modal>
<p>모달창입니다.</p>
<button>취소</button>
</Modal>
</ModalBg>
:
null
}
modal state
값이 true
인 경우에는 모달을 렌더하고 아닌 경우에는 null
를 렌더null
를 렌더하면 아무것도 나타나지 않는다. modal state
값이 true
일 때 모달 렌더 2{
modal &&
<ModalBg>
<Modal>
<p>모달창입니다.</p>
<button>취소</button>
</Modal>
</ModalBg>
}
modal state
값이 true
인 경우에는 모달을 렌더.modal state
가 false 인 경우에는 false, true일 때는 <ModalBg>생략/ModalBg>
가 된다.{
modal == true
?
<ModalBg>
<Modal>
<p>모달창입니다.</p>
<button onClick={ () => setModal(false) }>취소</button>
</Modal>
</ModalBg>
:
null
}
setModal
함수를 통해서 false
로 state
업데이트 modal state
의 값이 true
가 아니기 때문에 null
이 렌더되면서 모달이 사라진다.useRef
를 이용해서 모달 백그라운드를 제어해줘야 한다.
const outside = useRef();
ref
속성을 준다. (ref
속성의 값으로 앞서 만든 객체를 준다)<ModalBg
ref={oustside}
>
outside.current // => ModalBg
<ModalBg
ref={oustside}
onClick={ (e) => { if(e.target == outside.current) setModal(false) } }
>
oustside.current
가 맞다면 모달이 꺼진다.import { useState, useRef } from "react";
const Page = () => {
const [modal, setModal] = useState(false);
const outside = useRef();
return (
<>
<button onClick={ () => setModal(true) }>모달 열기</button>
{
modal &&
<ModalBg
ref={outside}
onClick={ (e) => { if(e.target == outside.current) setModal(false) } }
>
<Modal>
모달 내용
<button onClick={ () => setModal(false) }>취소</button>
</Modal>
</ModalBg>
}
</>
)
}
export default Page;