| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Spring Security
- 스프링 시큐리티
- spring error
- error
- jpa
- react simple captcha
- react captcha
- react 심플캡차
- 리액트 심플캡차
- 스프링 시큐리티 로그인
- 스프링
- react 캡차
- 젠킨스
- react 자동입력방지
- spring security 로그인
- 에러
- Security 로그인
- build
- CI
- Spring Boot
- git
- 깃
- maven
- 리액트 캡차
- Docker
- react 상태
- REACT
- SpringBoot
- myBatis
- ChatGPT
- Today
- Total
I can do it(Feat. DEV)
React 팝업창 띄우기(2) - 하루 동안 보지 않기 본문
앞서 팝업창 띄우기까지 했지만 기능 추가 요청이 들어옴.
바로바로 하루 동안 보지 않기 기능!
개발엔 안 되는 게 없다는 마인드를 가진(x) 가지려고 노력하는 나.

바로 기능 개발 시작.
예전에 만들어봤었던 방식으로 진행하겠음.
코드는
2022.10.06 - [개발자 모드/React] - React 팝업창 띄우기(1)
React 팝업창 띄우기(1)
관리자 화면에서 등록한 팝업창을 사용자 화면에서 띄우기 위해 팝업 컴포넌트를 만들어서 작업하던 중 다른 방법이 없을까? 해서 갓글에 검색. 찾아보니 React-Modal이란 라이브러리 발견. 여기서
precious-value.tistory.com
전에 만들어놓은 팝업창 그대로 사용하겠음.

먼저 위 사진처럼 하루 동안 보지 않기 버튼을 추가해줌.
//하루동안 보지 않기 버튼 코드
<div>
<Link
to="#"
onClick={(e) => {
closePopup(e, popup.id, true); //기존 x버튼과 차이점을 두기위해 true 값을 파라미터로 전달
}}
>
<span>하루동안 보지 않기</span>
<i className="fas fa-times-circle"></i> //fontawesome 태그(위 팝업 사진에는 빠진 상태)
</Link>
</div>
X 버튼이나 하루 동안 보지 않기 버튼이나 팝업을 닫는 기능이기 때문에 같은 함수를 사용하였고,
구분이 필요했기 때문에 true 값을 3번째 파라미터로 전달함.
FontAweSome은 다들 아시겠지만
Font Awesome
The world’s most popular and easiest to use icon set just got an upgrade. More icons. More styles. More Options.
fontawesome.com
다양한 무료 아이콘들을 사용할 수 있어서 자주 사용함.
사용 방법은 검색하시면 잘 나와있고 필자도 다음번에 한번 정리해보겠음.
버튼을 다 만들었다면 기능을 만들어야 함.
const closePopup = (e, popupId, check) => {
e.preventDefault(); //이벤트 작동하지 않도록 해주는 메소드
if (check) {
//하루동안 보지않기
window.sessionStorage.setItem(
"popupClosedTime" + popupId, //임의로 설정한 key
moment().format("YYYY-MM-DD HH:mm") //현재 시간 값(value)
);
}
//팝업 닫는 기능(저번 글 내용과 같음)
let prevPopups = popups;
let newPopups = [];
prevPopups.forEach((popup) => {
if (popup.id === popupId) {
popup.visible = false;
}
newPopups.push(popup);
});
setPopups(newPopups);
};
필자는 클라이언트의 sessionStorage를 사용하여 기능을 만들어보았음.
※대략적인 흐름
1. 하루동안 보지않기를 클릭한 팝업을 sessionStorage에 등록을 함.(이때 현재 시간 값도 필히 등록해야함)
2. 팝업을 불러올 때 sessionStorage에 있는 값을 비교해 visible : false로 설정함.
3. 팝업 속성 중 visible : true 인 것만 띄움.
2과정에서 sessionStorage에 있는 시간 값으로 24시간이 지났는지 안 지났는지 비교함.
//팝업 데이터 가져오는 코드
if (response.data.content.length > 0) {
response.data.content.forEach((popup) => {
const popupClosedTime = window.sessionStorage.getItem(
"popupClosedTime" + popup.id
);
if (isNaN(popupClosedTime)) {
//sessionStorage에 등록된 팝업이 있을 때
if (
parseInt( //현재 시간과 팝업 닫은 시간 차이를 숫자로 파싱
moment.duration(moment().diff(popupClosedTime)).asHours()
) > 24
) {
//24시간 지났을 때
popup.visible = true;
} else {
//24시간 안 지났을 때
popup.visible = false;
}
} else {
//없을 때
popup.visible = true;
}
});
setPopups(response.data.content);
} else {
setPopupState(false);
}
이렇게 하면 팝업 하루 동안 보지 않기 기능 완성.
이때까지 과거 갓글에 검색해서 얻은 sessionStorage를 이용하는 방법이였음. 끝.
날씨가 너무 좋은 금요일임.
다들 감기 조심하시고 연휴 푹 쉬시길.
글 읽어주셔서 감사.
'개발자 모드 > 응용' 카테고리의 다른 글
| React 게시판 목록 날짜 별로 정렬하기 (2) | 2022.10.14 |
|---|---|
| Spring Security passwordEncoder 설정 관련 (0) | 2022.10.12 |
| React 팝업창 띄우기(1) (0) | 2022.10.06 |
| React 동적으로 style 추가 (2) | 2022.10.04 |
| [React]Router Props (0) | 2022.09.28 |