728x90
Home 접근 시 뜨는 팝업 구현
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에 setShowMainPop전달
</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);
728x90
'JavaScript > React' 카테고리의 다른 글
[React] useReducer (React Hooks) (0) | 2023.07.24 |
---|---|
[React] Modal창 띄워졌을 때 body 스크롤 안되게 하기 (0) | 2023.06.29 |
[React] 리액트훅스 - useReducer (0) | 2023.06.28 |
[React] useState,Props로 장바구니 기능, 상태관리 (0) | 2023.06.27 |
[React] react-cookie 로 로그아웃 기능 구현하기 (0) | 2023.06.03 |
댓글