javascript - 重复调用时仅更改一次状态
问题描述
我正在尝试增加计时器间隔,以便它开始快速,然后逐渐变慢。我已经声明了状态和一个在达到时间间隔时调用的函数。TimeInterval 状态应该增加到 4,然后下次调用 8、16、32 等。但由于某种原因,它只被调用一次并且会卡在 4 上。RandomNumberGenerator() 和 RandomColorGenerator() 不断更新。知道为什么 TimeInterval 会卡在 4 上吗?
const [TimeInterval, setTimeInterval] = useState(2)
const NextSelection = () => {
setTimeInterval(TimeInterval * 2)
RandomNumberGenerator()
RandomColorGenerator()
}
解决方案
useState
钩子更新是一个异步操作。尽管这不是这里的主要问题,但钩子持有的值是在调用函数时它被关闭的值。当新值依赖于以前的值时,最好使用 setter 函数,因为每次渲染都会对变量形成一个闭包
setTimeInterval(TimeInterval * 2)
到
setTimeInterval(latestTimeInterval => latestTimeInterval * 2)
推荐阅读
- php - 如何使用 PHP SDK 从 AdmobMediation 获取中介报告
- excel - 如何从单个循环中提取多个项目并填充多个列
- python - Scrapy - 使用带有项目列表的“规范化空间”
- javascript - 浏览器在正常启动时是否可以在执行过程中变成无头,反之亦然?
- javascript - 在倒数计时器结束后设置秒表计时器
- node.js - 通过 React 表单中的节点进行 API 连接
- xml - 即时调用的 WSDL 链接中是否存在语法错误?如果 ref 存在 [...]
- python-3.x - 将科学记数法转换为日期时间
- java - 具有来自一对一映射实体的属性
- python - Python 请求 - 指定在 xml 响应中获得什么