美文网首页
react倒计时

react倒计时

作者: 金药 | 来源:发表于2021-04-13 16:03 被阅读0次
    import React, { Component } from 'react'
    
    interface Props {
      endTime: string;
      endTimeFun?: Function;
    }
    interface State {
      day: string | number;
      hour: string | number;
      minute: string | number;
      second: string | number;
    }
    export default class CountDown extends Component<Props, State> {
      timer: NodeJS.Timeout;
      constructor(props) {
        super(props);
        this.state = {
          day: 0,
          hour: 0,
          minute: 0,
          second: 0
        }
      }
      componentDidMount() {
        if (this.props.endTime) {
          let endTime = this.props.endTime.replace(/-/g, "/");
          this.countFun(endTime);
        }
      }
    
      //组件卸载取消倒计时
      componentWillUnmount() {
        clearInterval(this.timer);
      }
    
      countFun = (time) => {
        let end_time = new Date(time).getTime(),
          sys_second = end_time - new Date().getTime();
    
        // 将倒计时方法抽出,立即触发第一次倒计时
        const startTimer = () => {
          //防止倒计时出现负数
          if (sys_second > 1000) {
            sys_second -= 1000;
            let day = Math.floor((sys_second / 1000 / 3600) / 24);
            let hour = Math.floor((sys_second / 1000 / 3600) % 24);
            let minute = Math.floor((sys_second / 1000 / 60) % 60);
            let second = Math.floor(sys_second / 1000 % 60);
            this.setState({
              day: day,
              hour: hour < 10 ? "0" + hour : hour,
              minute: minute < 10 ? "0" + minute : minute,
              second: second < 10 ? "0" + second : second
            })
          } else {
            clearInterval(this.timer);
            //倒计时结束时触发父组件的方法
            this.props.endTimeFun && this.props.endTimeFun();
          }
          return startTimer
        }
    
        this.timer = setInterval(startTimer(), 1000);
      }
    
      render() {
        const { day, hour, minute, second } = this.state;
        return (
          <>
            {day ? `${day}天` : ''}
            {hour && hour !== '00' ? `${hour}:` : ''}
            {minute == '0' ? '00' : minute}:
            {second == '0' ? '00' : second}
          </>
        )
      }
    }
    

    引用

    <CountDown endTime={‘2021-04-14 15:56:08’} endTimeFun={endTimeFun} />
    

    相关文章

      网友评论

          本文标题:react倒计时

          本文链接:https://www.haomeiwen.com/subject/lxfllltx.html