일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이분 검색
- ESlint
- CORS
- RTK Query
- 호이스팅
- 리터럴 타입
- 태그된 유니온
- 무한 스크롤
- 타입 좁히기
- 인터섹션
- 공변성
- webpack
- Cypress
- 반공변성
- Promise
- tailwind
- CI/CD
- Jest
- map
- TS
- React
- dfs
- useAppDispatch
- autosize
- app router
- async/await
- 결정 알고리즘
- 투포인터
- SSR
- recoil
Archives
- Today
- Total
짧은코딩
모달 기능 구현 방법 본문
반응형
모달 기능
모달을 구현하기 위해서 생각할 부분은
- 어떤 버튼, 부분을 눌렀을 때 모달이 뜨고 사라져야한다.
- 모달 바깥 부분을 누르면 모달이 사라져야 한다.
- 모달 자기 자신을 누르면 사라지면 안된다.
이렇게 3가지를 고려해야 한다.
구현 방법
-1번
모달이 뜨고 사라는 부분을 구현하기 위해서는
const onClickUserProfile = useCallback(() => {
setShowUserMenu((prev) => !prev);
}, []);
이렇게 state와 함수를 만들어서 구현하면 된다.
-2번
모달 바깥 부분을 누르면 모달이 사라져야 하는 기능은 하나의 큰 div를 만들고 그 안에 모달을 구현한다. 큰 div는 화면 전체를 차지 하도록 한다. position을 absolute로 만들어서 전체를 차지하게 하고 바깥을 누르면 모달이 꺼지는 함수를 활용해서 구현하면된다.
(왜인지 모르겠지만 배경색에 opacity를 적용한 부분을 클릭하면 모달이 사라지지 않아서 모든 opacity를 제거했다.)
-3번
2번까지 하면 다 구현되는데, 자기 자신을 눌러도 모달이 사라진다. 이것을 방지하기 위해서는
const stopPropagation = useCallback((e: any) => {
e.stopPropagation();
}, []);
stopPropagation을 활용하여 모달을 닫는 함수가 전달되지 않도록 해야한다.
반응형
'리액트' 카테고리의 다른 글
@로 태그 가능한 MentionsInput, textarea 박스를 위한 autosize 라이브러리 (0) | 2022.08.23 |
---|---|
리액트에서 fontawesome 적용하기 (0) | 2022.08.16 |
axios 요청 시 주의 사항 (0) | 2022.08.12 |
stopPropagation() (0) | 2022.08.08 |
npm과 yarn (0) | 2022.08.01 |
Comments