使用 useEffect 从日期开始倒计时,包括天数、小时数、分钟数、秒数

Countdown from date with days, hours, minutes, secondes with useEffect

我从定义的日期开始倒计时, 我快要让它工作了,但我没有遇到问题

我刚开始使用 ReactJS,显然我的类型不对 我需要有天、小时、分钟和秒的倒计时,我使用了 useEffect 来实现我不知道它是否最适合

TypeError: Assignment to constant variable. getTime2

42 | hours = hours-(days*24);

import React, { useState, useEffect } from 'react';

const Countdown = () => {
  const[rDay, setRDay] = useState(0);
  const[rHour, setRHour] = useState(0);
  const[rMin, setRMin] = useState(0);
  const[rSec, setRSec] = useState(0);

function getTime2() {
   const date_future = new Date(
    Date.UTC(2021, 11, 22, 18, 0, 0),
  ).getTime(); 
   const date_now = new Date();

   const seconds = Math.floor((date_future - (date_now))/1000);
   const minutes = Math.floor(seconds/60);
   const hours = Math.floor(minutes/60);
   const days = Math.floor(hours/24);
    
   hours = hours-(days*24);
   minutes = minutes-(days*24*60)-(hours*60);
   seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60);
   
   setRDay(days);
   setRHour(hours);
   setRMin(minutes);
   setRSec(seconds);
}

   useEffect(()=>{
    setInterval(function(){
      getTime2()
    }, 1000);
  }, []);


  return(
    <div className="timer-container">
      <div className="numbers">
      <span className = "num-span">{("0" + rDay).slice(-2)}</span>
        <span className = "segment">:</span>
        <span className = "num-span">{("0" + rHour).slice(-2)}</span>
        <span className = "segment">:</span>
        <span className = "num-span">{("0" + rMin).slice(-2)}</span>
        <span className = "segment">:</span>
        <span className = "num-span">{("0" + rSec).slice(-2)}</span>
      </div>
      <div class="sub-numbers">
      <span className = "sub-span">Day(s)</span>
        <span></span>
        <span className = "sub-span">H</span>
        <span></span>
        <span className = "sub-span">Min</span>
        <span></span>
        <span className = "sub-span">Sec</span>
      </div>
     
    </div>
    
  );
};


export default Countdown;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

您正在重新分配已使用 const 声明为常量的变量。将 const 更改为 let 并且 TypeError 应该消失:

   let seconds = Math.floor((date_future - (date_now))/1000);
   let minutes = Math.floor(seconds/60);
   let hours = Math.floor(minutes/60);
   let days = Math.floor(hours/24);
    
   hours = hours-(days*24);
   minutes = minutes-(days*24*60)-(hours*60);
   seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60);