Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中创建倒计时组件_Javascript_Reactjs_Ecmascript 6_Countdowntimer_Buttonclick - Fatal编程技术网

在JavaScript中创建倒计时组件

在JavaScript中创建倒计时组件,javascript,reactjs,ecmascript-6,countdowntimer,buttonclick,Javascript,Reactjs,Ecmascript 6,Countdowntimer,Buttonclick,目前正在做一个小项目,包括建造一个波莫多罗时钟,但我被困在计数器组件上。这是我在下面编写的代码中经过调整的部分 import React from "react"; import { useState, useEffect } from "react"; const Timer = ({ sessions, breaks }) => { const [minutes, setMinutes] = useState(sessions);

目前正在做一个小项目,包括建造一个波莫多罗时钟,但我被困在计数器组件上。这是我在下面编写的代码中经过调整的部分

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

const Timer = ({ sessions, breaks }) => {
    const [minutes, setMinutes] = useState(sessions);
    const [seconds, setSeconds] = useState(0);
    const [onSession, setOnSession] = useState(true);

    const startCount = () => {
        let myInterval = setInterval(() => {
            if (seconds > 0) {
                setSeconds(seconds - 1);
            }
            if (seconds === 0) {
                if (minutes === 0) {
                    clearInterval(myInterval);
                    setOnSession(false);
                } else {
                    setMinutes(minutes - 1);
                    setSeconds(59);
                }
            }
        }, 1000);
        return () => {
            clearInterval(myInterval);
        };
    };

    return (
        <div>
            <h2>{onSession ? "Session" : "Break"}</h2>

            {minutes === 0 && seconds === 0 ? null : (
                <h1>
                    {" "}
                    {minutes < 10 ? `0${minutes}` : minutes}:
                    {seconds < 10 ? `0${seconds}` : seconds}
                </h1>
            )}
            <button onClick={startCount}>Start</button>
        </div>
    );
};

export default Timer;
从“React”导入React;
从“react”导入{useState,useffect};
常量计时器=({会话,中断})=>{
const[minutes,setMinutes]=使用状态(会话);
常数[秒,设置秒]=使用状态(0);
const[onSession,setOnSession]=useState(true);
常量startCount=()=>{
让myInterval=setInterval(()=>{
如果(秒>0){
设置秒(秒-1);
}
如果(秒===0){
如果(分钟===0){
clearInterval(myInterval);
设置会话(假);
}否则{
设置分钟数(分钟-1);
设置秒(59);
}
}
}, 1000);
return()=>{
clearInterval(myInterval);
};
};
返回(
{onSession?“Session”:“Break”}
{分钟===0和秒===0?空:(
{" "}
{minutes<10?`0${minutes}`:minutes}:
{seconds<10?`0${seconds}`:seconds}
)}
开始
);
};
导出默认定时器;
分钟状态的值是从应用程序组件中的状态(会话)获取的。秒最初设置为0。我面临的问题是,每当我单击开始按钮时(取决于其调整方式),倒计时开始运行,但沿线出现故障或秒数部分仅在setSeconds设置为的任何值处停止


PS:代码块中的倒计时运行得非常完美,在useEffect中包装/调用时,正如预期的那样。

为什么不将运行时间转换为秒,然后在视图中将它们转换为分和秒,而不必处理基数为60的所有问题呢?谢谢。我会试着解决这个问题,然后再给你回复。听起来好多了。为什么不把你跑的时间转换成秒,然后把视图中的时间转换成分和秒,而不用处理基数60之类的问题呢?谢谢。我会试着解决这个问题,然后再给你回复。听起来好多了。