我正在尝试构建一个模拟时钟,秒针每秒旋转一次,分针每分钟旋转 6 度,时针每 12 分钟旋转 6 度。
这是代码和框:https ://codesandbox.io/s/react-example-d7mes ? file =/ Clock.js
每当分针的角度是其中之一[72, 144, 216, 288, 360]
(12 分度)时,我将时针旋转 6 度一次。
这就是我正在做的:
let twelveMinDegrees = [72, 144, 216, 288, 360];
setInterval(() => {
this.setState(prev => ({
sec: prev.sec == 360 ? 6 : prev.sec + 6, //degrees
min: prev.sec == 354 ? (prev.min == 360 ? 6 : prev.min + 6) : prev.min, //degrees
hrs: (function(){ //degrees
const indx = twelveMinDegrees.findIndex(el => el == prev.min)
if(!minChanged && indx >=0){ //only change once for every 12min
minChanged = true;
let incHrs = prev.hrs + (6*indx);
console.log(incHrs);
return incHrs;
}else{
if(!twelveMinDegrees.includes(prev.min)){
minChanged = false;
}
return prev.hrs;
}
})()
}))
}, 1000)
但是时针没有改变,第二次被设置回else部分的前一个值并且返回的值incHrs
被忽略,因为在状态更新之前,else
被称为下一秒返回prev.hrs
的仍然是旧值(不是if(!minChanged && indx >=0)
) 中返回的值
我该如何解决?