Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- KDT 프로그래머스
- Spacer
- vuex map
- git 같은계정 다른 컴퓨터
- SCSS forward
- 프로그래머스 데브코스
- netlify redirect
- SCSS use
- 폼 입력 바인딩
- react next
- vue 이벤트 수신
- 프로그래머스 프론트엔드 데브코스
- SCSS extend
- vue mixin
- vue 지역 컴포넌트
- Vue
- 리액트
- SCSS import
- 이벤트 수식어
- 프로그래머스 데브코스 프론트엔드
- 다른컴퓨터에서 git사용
- 고양이 사진 검색기
- flex
- KDT 프로그래머스 데브코스 프론트엔드
- 프로그래머스 K_Digital Training
- 쌓임맥락
- 리스트 렌더링
- intersection opserver
- nextjs사용법
- postcss
Archives
- Today
- Total
혼자 적어보는 노트
[React] 오늘 하루 안보기/ 24시간 동안 안보기 팝업 구현 본문
화면의 Home page에 접근 시 팝업을 띄우려는 작업 중
오늘 하루 안보기를 구현해보기로 했다.
대략적인 구현 방법은
Local Storage에 날짜 및 시간을 담는 것이고
Home에 접근 시 Local Storage에 있는 Date을 현재 날짜/시간과 조회하여
조건에 따라 팝업을 노출해 주는 것이다.
일단 Home에서 state를 만들어주고 제어를 해 준다.
// Home.js
import { useEffect, useState } from "react";
import MainPopup from "../components/mainPopup";
function Home() {
const [showMainPop, setShowMainPop] = useState(false);
// 기본 세팅 값은 false
const HOME_VISITED = localStorage.getItem("homeVisited");
// localStorage에 homeVisited 조회
useEffect(() => {
const today = new Date();
const handleMainPop = () => {
if (HOME_VISITED && HOME_VISITED > today) {
// 현재 date가 localStorage의 시간보다 크면 return
return;
}
if (!HOME_VISITED || HOME_VISITED < today) {
// 저장된 date가 없거나 today보다 작다면 popup 노출
setShowMainPop(true);
}
};
window.setTimeout(handleMainPop, 1000); // 1초 뒤 실행
}, [HOME_VISITED]);
return (
<main className="home">
{showMainPop && <MainPopup setShowMainPop={setShowMainPop}></MainPopup>}
// MainPopup에 setShoMainPop전달
</main>
);
}
export default Home;
//MainPop.js
export default function MainPopup({ setShowMainPop }) {
//props로 setShowMainPop을 받아서 사용
const closePop = () => {
setShowMainPop(false);
};
const closeTodayPop = () => {
let expires = new Date();
expires = expires.setHours(expires.getHours() + 24);
localStorage.setItem("homeVisited", expires);
// 현재 시간의 24시간 뒤의 시간을 homeVisited에 저장
setShowMainPop(false);
};
return (
<div className="popup-wrapper">
<div className="main-popup">
<h1>팝업입니다.</h1>
<button onClick={closeTodayPop}>오늘 하루 열지 않기</button>
<button onClick={closePop}>닫기</button>
</div>
</div>
);
}
오늘 시간은 today = new Date();로 알 수 있고
만약 일주일 뒤로 설정을 한다면 today.setDate(today.getDate()+7);로 설정할 수 있다.
위의 방법은 현재 날짜 기준으로 24시간이 지난 후 이며
만약 24시간이 아니라 오늘의 23시 59분 59초까지로 설정을 하려면 어떻게 할까?
const closeTodayPop = () => {
let expires = new Date();
expires = expires.setHours(23, 59, 59, 0); //오늘 23시 59분 59초로 설정
localStorage.setItem("homeVisited", expires);
setShowMainPop(false);
};
'React' 카테고리의 다른 글
[React] 텍스트 줄 바꿈 / 데이터 불러 올 때 줄 바꿈 (0) | 2021.12.22 |
---|---|
[React] 부모 state변경 시 자식 컴포넌트 rerender (0) | 2021.12.21 |
[React] input warning / defaultValue / readOnly (0) | 2021.12.17 |
[React] 비동기 setState 연속 처리 시 오류 (0) | 2021.12.15 |
[React] input focus감지 / 영역 밖 클릭 시 이벤트 (0) | 2021.12.14 |
Comments