关于react hooks定时器问题
代码如下
import React, { useState, useEffect } from 'react';
import MajorClock from './MajorClock';
import ControlButtons from './ControlButtons';
import SplitTimes from './SplitTimes';
function StopCWatch() {
const [isStarted, setStarted] = useState(false);
const [startTime, setTime] = useState(null); // 开始时间
const [currentTime, setCurrentTime] = useState(null); // 当前时间
const [splits, setSplits] = useState([]);
let intervalHandle;
// 开始
const onStart = () => {
setStarted(true);
setTime(new Date().getTime());
setCurrentTime(new Date().getTime());
// 定时器
intervalHandle = setInterval(() => {
setCurrentTime(new Date());
}, 1000 / 60);
}
// 停止
const onPause = () => {
clearInterval(intervalHandle); // 清除定时器有问题
setStarted(false);
}
const onReset = () => {
setTime(null);
setCurrentTime(null);
setSplits([]);
}
const onSplit = () => {
setSplits([...splits, currentTime - startTime])
}
return (
<div>
<MajorClock milliseconds={currentTime - startTime}/>
<ControlButtons
activated={isStarted}
onStart={onStart}
onPause={onPause}
onReset={onReset}
onSplit={onSplit}
/>
<SplitTimes values={splits}/>
</div>
)
}
export default StopCWatch;
onStart的时候开启定时器,点击按钮停止时清除定时器,但是现在写的有问题,onPause方法中获取不到定时器
intervalHandle
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
把定时器的handle用useRef保存起来
创建时
清除时
原因是每次组件重新渲染的时候, 都会执行 let intervalHandle; , 所以你清除定时器时, 都获取不到intervalHandle