개발 일기
React 모달 구현하기 (외부 클릭 닫기)
ji_su_04
2023. 1. 26. 18:26
const [modalPlayItem, setModalPlayItem] = useState('');
const clickImg = (snippet) => {
setReleaseModal(true);
document.body.style.overflow = 'hidden';
setModalPlayItem(snippet);
};
const closeReleasePopup = () => {
setReleaseModal(false);
setModalPlayItem('');
document.body.style.overflow = 'unset';
};
import React, { useEffect, useState } from 'react';
import styled from '@emotion/styled';
import AddForm from '../components/AddForm';
import ContentsList from '../components/ContentsList';
import { authService } from '../firebase';
const Modal = ({ closeReleasePopup, modalPlayItem }) => {
return (
<>
<Layer onClick={() => closeReleasePopup()}></Layer>
<ModalLayer>
<CloseButton onClick={() => closeReleasePopup()}>X</CloseButton>
<ModalContainer>
</ModalContainer>
</ModalLayer>
</>
);
};
export default Modal;
const Layer = styled.div`
z-index: 1500;
display: block;
background: rgba(0, 0, 0, 0.3);
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
`;
const ModalLayer = styled.div`
z-index: 2000;
width: 80%;
height: 80vh;
position: fixed;
top: 50%;
left: 50%;
background-color: white;
border-radius: 16px;
transform: translate(-50%, -50%) !important;
`;
const ModalContainer = styled.div`
width: 85%;
height: 100%;
margin: auto;
display: flex;
justify-content: space-evenly;
align-items: center;
gap: 30px;
`;
간단하게 컴포넌트로 모달을 구현해줬고 모달 외부를 클릭했을 때 닫게 하기 위해 Layer에 onClick={() => closeReleasePopup()}를 줬다.
document.body.style.overflow는 외부 스크롤을 방지하게 하기 위해 줬고 모달이 닫히면 overflow가 꺼지도록 줬다.
외부 클릭시 닫히는 기능을 css로 줬는데 이 부분을 조금더 공부해야겠다.
반응형