предоставлю код компонента), ставлю в интервал значение 1000 - таймер выстреливает куда быстрее 1 секунды, ставлю 10000 - работает как надо, каждые 10 секунд выстреливает. Почему так может происходить?
Проверял, запуск таймера срабатывает лишь раз!
Тестирую на физическом устройстве (USB)
Код таймера:
const [timer, setTimer] = useState(59)
useEffect(() => {
setTimerInterval()
return () => { clearInterval(intervalID) }
}, [])
const setTimerInterval = () => {
intervalID = setInterval(() => {
setTimer(timer => {
if (timer - 1 <= 0) {
return clearInterval(intervalID)
}
return timer - 1
})
}, 1000)
}
В setTimerInterval дичь какая-то написана
В чём именно?
Таймеры сами по себе не обязаны быть супер-точными, и у них есть погрешность, но тут вы вносите гораздо большие погрешности. 1. Вместо алгоритма, который эти погрешности сглаживает, вы используете алгоритм который эти погрешности наоборот накапливает декрементируя счетчик без компенсаций 2. Помимо собственной погрешности таймеров, вы добавляете ненулевой (и довольно значительный в RN) интервал к каждому срабатыванию в виде ререндера компонента для изменения значения хука, этот интервал вообще не предсказуем
Понял. Реализовал с использованием даты
Да! Если использовать дату, то это будет компенсироваться хотя бы. Локальные отклонения всё равно будут, но в среднем будет тикать как надо
Обсуждают сегодня