[英]How to make a timer that ticks and display time at an exactly interval in React Native?
在 RN 中, setInterval
不会正好是您想要的时间间隔。 有时需要更长的时间
我如何实现一个计时器,它可以准确地按照您提供的时间间隔(例如 100 毫秒)滴答和显示时间
计时器应该以与手机自带的本机计时器相同的方式计算时间。
*下面这一点正是我尝试做的,但可以忽略或用于解决方案
我在做一个计时器。 为了在屏幕上显示它,我制作了一个如下所示的对象
例如
let time = {
milliseconds: 1,
seconds: 2,
minutes: 3
}
我有一个setInterval
从这个对象中减去x
毫秒。
我需要最快和最佳的方法来从这个对象中减去毫秒数。 遵循正常的时间规则(1000 毫秒为 1 秒,60 秒为 1 分钟),如果您得到负时间,它也需要在0
处停止。
它应该感觉像一个本地计时器。
这是我用来从计时器对象中减去毫秒的函数:
export function minusTime(time, millis) {
let milliseconds = parseInt(millis % 1000)
let seconds = Math.floor((millis / 1000) % 60)
let minutes = Math.floor((millis / (1000 * 60)))
if (time.minutes - minutes < 0) {
return -1
}
time.minutes -= minutes
if (time.seconds - seconds < 0) {
if (time.minutes - 1 < 0) {
return -1
} else {
time.minutes -= 1
time.seconds += 60
}
}
time.seconds -= seconds
if (time.milliseconds - milliseconds < 0) {
if (time.seconds - 1 < 0) {
if (time.minutes - 1 < 0) {
return -1
} else {
time.minutes -= 1
time.seconds += 59
time.milliseconds += 1000
}
} else {
time.seconds -= 1
time.milliseconds += 1000
}
}
time.milliseconds -= milliseconds
return time
}
逻辑是正确的(但也看起来有点丑,如果有更好的方法,我很感激)。
我使用间隔的方式是这个useInterval
钩子
function useInterval(callback, delay) {
const savedCallback = useRef()
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback
}, [callback])
// Set up the interval.
useEffect(() => {
function tick() {
savedCallback.current()
}
if (delay !== null) {
let id = setInterval(tick, delay)
return () => clearInterval(id)
}
}, [delay])
}
在我的组件中,我称它为
useInterval(() => {
...
let blockTime = minusTime(currentBlock.blockTime, interval)
...
}, isRunning ? interval : null)
我只是像这样展示它
<Text>
{`${minutes}:${seconds},${milliseconds}`}
</Text>
当我运行它时,计时器中的 1 秒不是现实生活中的 1 秒。
我怎样才能让它成为现实生活中的一秒? 我的函数运行时间是否太长,这就是它运行缓慢的原因? 或者我需要别的东西?
如何执行我的计时器,使其在现实生活中匹配 1 秒?
有没有更好的方法来处理我的计时器对象?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.