【问题标题】:React Native: Timer keeps resetingReact Native:计时器不断重置
【发布时间】:2021-02-06 11:21:13
【问题描述】:

我正在尝试做一个倒数计时器,但是在它达到 1 后它会重置为 5 当它应该去 '00:00' 时,我不知道我哪里出错了请有人帮助我

这是我的代码:

const CountDown = () => {
    const RESET_INTERVAL_S = 5;

    const formatTime = (time) =>
        `${String(Math.floor(time / 60)).padStart(2, "0")}:${String(
            time % 60
        ).padStart(2, "0")}`;

    const Timer = ({ time }) => {
        const timeRemain = RESET_INTERVAL_S - (time % RESET_INTERVAL_S);

        return (
            <>
                <Text>{formatTime(timeRemain)}</Text>
            </>
        );
    };

    const IntervalTimerFunctional = () => {
        const [time, setTime] = useState(0);

        console.log("The time is", time);

        useEffect(() => {
            const timerId = setInterval(() => {
                setTime((t) => t + 1);
            }, 1000);
            return () => clearInterval(timerId);
        }, []);

        return <Timer time={time} />;
    };

    return <IntervalTimerFunctional />;
};

【问题讨论】:

    标签: javascript react-native countdowntimer


    【解决方案1】:

    我不确定这是一个完美的解决方案,但它可以工作:

    您可以在计时器达到最大值时停止它:

     useEffect(() => {
        const timerId = setInterval(() => {
            setTime((t) => {
                if(t + 1 === RESET_INTERVAL_S) {
                    clearInterval(timerId)
                }
    
                return t + 1;
            });
        }, 1000);
    
        return () => clearInterval(timerId);
    
    }, []);
    

    当你达到限制时显示“00:00”:

        <Text>{time === RESET_INTERVAL_S ? "00:00" : formatTime(timeRemain)}</Text>
    

    这是一个有效的example

    【讨论】:

      【解决方案2】:
      useEffect(() => {
           const timerId = setInterval(() => {
           setTime((t) => t + 1);
      }, 1000);
           return () => clearInterval(timerId);
      }, []);
      

      您需要设置要重复的值。如果没有,这将继续重置它。

      您还可以添加一个条件来检查计时器的值并停止它。像这样:

      {
         time !== 0 ? setTime((t) => t+1): time = 0;
      }
      

      Here is a similar problem to yours.

      【讨论】:

      • 我的代码中已经有这个了,但不幸的是它还在丢失
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2019-08-30
      • 1970-01-01
      • 2015-03-08
      相关资源
      最近更新 更多