In React I like to increment a state-value (progressValue) every 500 ms from 0 to 100. This is what I do:
const [progressValue, setProgressValue] = React.useState<number>(0)
const tick = () => {
console.log("progressValue: " + progressValue)
if (progressValue >= 100) {
setProgressValue(100)
} else {
const newValue = progressValue + 0.1
setProgressValue(newValue)
setTimeout(tick, 500)
}
}
const onPlayClicked = () => {
setProgressValue(0)
tick()
}
Unfortunately the log says
progressValue: 0
progressValue: 0
progressValue: 0
...
What's wrong?
EDIT
This worked finally:
const [progressValue, setProgressValue] = React.useState<number>(0)
React.useEffect(() => {
const interval = setInterval(() => {
if (progressValue < 100) {
setProgressValue((prevVal) => prevVal + 1);
}
}, 500);
return () => clearInterval(interval);
}, [progressValue]);
useEffect.useEffectcould be the ideal way.useEffectandsetInterval. The examples here stackoverflow.com/questions/72592921/… don't work, too...