热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

创建倒数计时器时遇到问题,该计时器应在最后一个计时器结束时启动一个新计时器(包括小吃链接!)

因此,我正在尝试创建一个允许用户执行以下操作的计时器:开始,暂停和继

因此,我正在尝试创建一个允许用户执行以下操作的计时器:开始,暂停和继续。

此外,我希望计时器启动并运行10分钟,一旦完成,请重置并运行5分钟,然后再重置并运行10分钟,然后停止。

我的代码存在的问题是,在满足我要查找的条件时,clearInterval(interval)并未按预期停止计时器。正在访问代码块,并且控制台正在运行中登录,但是我的计时器将继续运行,甚至会使分钟数变为负数:(

这是snack和代码:

import React,{ useState,useEffect } from 'react';
import { View,Text } from 'native-base';
const Timer = ({ timerStarted,toggleTimer }) => {
const [minutes,handleMinutes] = useState('10');
const [seconds,handleSeconds] = useState('00');
const [secondsLeft,handleSecondsLeft] = useState();
const [timerType,handleTimerType] = useState('1st'); // 2nd,3rd
console.log('timer type',timerType);
useEffect(() => {
let interval = null;
const timerEnded = minutes === '00' && secOnds=== '00';
console.log('useEffect Upper Level',minutes,seconds);
if (timerStarted && !timerEnded) {
console.log('timer starting',seconds);
interval = setInterval(() => {
decrementClock();
},100);
}
if (timerEnded && timerType === '3rd') {
clearInterval(interval);
// toggleTimer()
console.log('DONE');
}
if (timerEnded && timerType === '2nd') {
clearInterval(interval);
handleMinutes('10');
// toggleTimer();
console.log('interval?',interval);
handleTimerType('3rd');
console.log('SECOND CONDITION');
}
if (timerEnded && timerType === '1st') {
console.log('FIRST CONDITION');
console.log('interval?',interval);
clearInterval(interval);
handleMinutes('05');
// toggleTimer();
handleTimerType('2nd');
}
if (!timerStarted) {
console.log('paused?');
clearInterval(interval);
}
return () => clearInterval(interval);
},[timerStarted,seconds,secondsLeft,timerType]);
useEffect(() => {
let result = minutes * 60 + parseInt(seconds);
timerStarted && handleSecondsLeft(result);
},[timerStarted]);
const decrementClock = () => {
let min = Math.floor(secondsLeft / 60);
let sec = secondsLeft - min * 60;
if (min <10) {
min = '0' + min;
}
if (sec <10) {
sec = '0' + sec;
}
handleMinutes(min);
handleSeconds(sec);
handleSecondsLeft(secOndsLeft=> secondsLeft - 1);
};
return (


{minutes}:{seconds}


);
};
const TimerScreen = () => {
const [timerStarted,handleTimerStarted] = useState(false);
const toggleTimer = () => {
handleTimerStarted(!timerStarted);
};


;
};


useEffect(() => {
},[timerStarted,seconds,minutes,secondsLeft,timerType]);

每次更新timerStarted,timerType时,都会触发上述代码。我认为这不好,因为它会影响您的间隔时间。您应该将计时器分开。

您可以在本教程https://overreacted.io/making-setinterval-declarative-with-react-hooks/中使用useInterval钩子

useInterval(() => {
decrementClock();
},timerStarted ? 1000 : null); // If timerStarted,run interval. Otherwise,reset it

推荐阅读
  • 一、vue介绍Vue.js是一套构建用户界面(UI)的渐进式JavaScript框架,是一个轻量级MVVM(model-view-viewModel&# ... [详细]
  • 贴图的支持及设置:关于贴图分辨率的支持及设置的用户指南
    http:hi.baidu.comdbfr2011818itemeef1eac8df31a2d69744520b贴图分辨率虚幻引擎3支持的贴图分辨率是从1x1到4096x4096 ... [详细]
  • JS动态生成表格案例 ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉, ... [详细]
  • 浅谈Vantlist 上拉加载及下拉刷新的问题
    这篇文章主要介绍了浅谈Vant-list 上拉加载及下拉刷新的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完 ... [详细]
  • 我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个protectedvoidonScrollChang ... [详细]
  • 上次我们总结了React代码构建后的webpack模块组织关系,今天来介绍一下Babel编译JSX生成目标代码的一些规则,并且写一个简单的解析器,模拟整个生成的过程。我们还是拿最简 ... [详细]
  • IOSUITableView解析(一)
    UITableView的作用由于Iphone的大小有限,所以UITableView的作用是巨大的。比如QQ,微博等应用都用到了该控件。UITableVi ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了MongoDB快速入门教程(4.1)相关的知识,希望对你有一定的参考价值。4 ... [详细]
  • #import挂载对象所需要的参数(UIAlertView挂载对象)staticconstcharkRepresente ... [详细]
  • AsyncDisplayKit2.0教程(下)
    AsyncDisplayKit2.0Tutorial:AutomaticLayout原文:AsyncDisplayKit2.0Tutorial:Automatic ... [详细]
  • 作者|相学长原文|https:github.comwuomzfxblogblobmasterthis.md日常开发中,我们经常用到this。例如用Jquery绑定事件 ... [详细]
  • jquery调用网易云音乐API遇到,网易音乐接口需要用node启动前端js调用代码varthisUrlhttp:127.0.0.1:3000 ... [详细]
author-avatar
纯De魔力_629
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有