14 일 카운트 다운 타이머를 만들려고하는데 페이지를 새로 고칠 때 재설정되지 않아야합니다. 나는 이미 그것을했지만 문제는 지금 날짜를 추가하는 방법을 모르겠다는 것입니다 + 14 일 동안 어떻게 할 수 있는지에 대한 아이디어. 도움을 주셔서 감사합니다.
이것은 내 코드입니다.
const Timer = () => {
const [timerDays, setTimerDays] = useState("00");
const [timerHours, setTimerHours] = useState("00");
const [timerMinutes, setTimerMinutes] = useState("00");
const [timerSeconds, setTimerSeconds] = useState("00");
let interval = useRef();
const startTimer = () => {
const countdownDate = new Date("Jan 17, 2021 00:00:00").getTime();
interval = setInterval(() => {
const now = new Date().getTime();
const distance = countdownDate - now;
const days = Math.floor(distance / (1000 * 60 * 60 * 24));
const hours = Math.floor(
(distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
);
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
if (distance < 0) {
clearInterval(interval.current);
} else {
setTimerDays(days);
setTimerHours(hours);
setTimerMinutes(minutes);
setTimerSeconds(seconds);
}
});
};
useEffect(() => {
const someref = interval.current;
startTimer();
return () => {
clearInterval(someref);
};
}, []);
};
브라우저 새로 고침이 발생한 후에도 타이머를 사용하기를 원하기 때문에 로컬 저장소에서 시간을 지속적으로 유지하는 방법이 필요합니다. 그래서 여기에 당신이해야 할 일이 있습니다 :
const Timer = () => {
const [timerDays, setTimerDays] = useState("00");
const [timerHours, setTimerHours] = useState("00");
const [timerMinutes, setTimerMinutes] = useState("00");
const [timerSeconds, setTimerSeconds] = useState("00");
let interval = useRef();
const startTimer = (countdownDate) => {
const now = new Date().getTime();
const distance = countdownDate - now;
const days = Math.floor(distance / (1000 * 60 * 60 * 24));
const hours = Math.floor(
(distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
);
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
if (distance < 0) {
clearInterval(interval.current);
} else {
setTimerDays(days);
setTimerHours(hours);
setTimerMinutes(minutes);
setTimerSeconds(seconds);
}
};
function saveInLocalStorage(time) {
localStorage.setItem("timer", time);
}
function getTimeFromLocalStorage() {
return localStorage.getItem("timer");
}
useEffect(() => {
const localTimer = getTimeFromLocalStorage();
if (localTimer) {
interval.current = setInterval(() => {
startTimer(+localTimer);
}, 1000);
} else {
const countdownDate = new Date().getTime() + 14 * 24 * 60 * 1000;
saveInLocalStorage(countdownDate);
interval.current = setInterval(() => {
startTimer(+countdownDate);
}, 1000);
}
return () => clearInterval(interval.current);
}, []);
return (
<div>
timerDays: {timerDays} timerHours: {timerHours}
timerMinutes: {timerMinutes} timerSeconds: {timerSeconds}
</div>
);
};
다음은 작동하는 데모입니다 : https://codesandbox.io/s/hardcore-sammet-9zj32?file=/src/App.js:84-1823
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다