react-native中的以下组件:
import { useEffect, useState } from 'react'
let startValue = null // only using this to restart the counter from resetTimer() (other better approaches?)
export const NewTimer = () => {
const [seconds, setSeconds] = useState(startValue)
const formatedTime = () => {
return [pad(parseInt(seconds / 60)), pad(seconds % 60)].join(':')
}
useEffect(() => {
const timer = setInterval(() => setSeconds(++seconds), 1000) // I guess this line triggers the error
return () => {
clearInterval(timer)
}
}, [])
return formatedTime
}
const pad = (num) => {
return num.toString().length > 1 ? num : `0${num}`
}
export const resetTimer = () => {
startValue = 0
}
导致未捕获的错误:“seconds”为只读
有谁能指出错误在哪里吗?谢谢!
1条答案
按热度按时间szqfcxe21#
当您执行
++seconds
时,您正在尝试改变seconds
this render,这是不允许的。我将使用setState回调来获取当前值,然后执行seconds + 1
,这将完成相同的任务: