У меня есть этот компонент секундомера, который имеет проводное поведение: секундомер работает отлично, за исключением того, что он прекращает повторный рендеринг в пользовательском интерфейсе, когда я комментирую строку setTest(val => val + 1)
изнутри useEffect (). Я подтвердил, что timeArray
по-прежнему обновляется с помощью console.log, а <Text>
в пользовательском интерфейсе - нет. Пожалуйста, помогите, если вы заметили что-то логически неправильное с кодом ниже:
const Stopwatch = () => {
const [timeArray, setTime] = useState([0,0,0])
const [test, setTest] = useState(0)
useEffect(() => {
const interval = setInterval(() => {
setTime(val => time(val))
setTest(val => val + 1) <-- commenting this line breaks UI re-rendering below of var timeArray!!
}, 1000)
return () => clearInterval(interval)
},[])
return(
<View>
<Text>{timeArray[2]}:{timeArray[1]}:{timeArray[0]}</Text>
</View>
)
}
const time = (value) =>{
value[0]++
if (value[0] == 59){
value[1]++
value[0] = 0
}
if (value[1] == 59 && value[0] == 59){
value[2]++
value[0] = 0
value[1] = 0
}
return value
}
export default Stopwatch