javascript - 反应钩子:新状态值未反映在 setInterval 回调中
问题描述
我有一个函数反应组件,它有一个从 10000 开始到 0 的计数器。
我在组件安装期间使用 useEffect 挂钩设置 setInterval 回调。回调然后更新计数器状态。
但我不知道为什么,count
价值永远不会减少。每次回调运行count
是 10000。
(我正在使用 react & react-dom 版本16.8.3
)
功能组件如下:
import React, { useState, useEffect, useRef } from 'react'
const Counter = () => {
const timerID = useRef()
let [count, setCount] = useState(10000)
useEffect(() => {
timerID.current = setInterval(() => {
//count here is always 10000
if (count - 1 < 0) {
setCount(0)
} else {
setCount(count - 1)
}
}, 1)
}, [])
return <h1 className="counter">{count}</h1>
}
export default Counter
这是codesandbox的链接:link
解决方案
您需要注意 中的变化count
,并清理您的useEffect()
:
useEffect(() => {
timerID.current = setInterval(() => {
if (count - 1 < 0) {
setCount(0)
} else {
setCount(count - 1)
}
}, 100)
return () => clearInterval(timerID.current);
}, [count])
推荐阅读
- visual-studio-2015 - 本地主机拒绝连接错误 VIsual Studio 2015
- neo4j - Neo4j Cypher UNWIND 键
- c# - 我们如何在应用程序中使用刷新令牌?
- mongodb - $push 在 mongoDB 中不起作用
- vb.net - 四舍五入到小数点后两位
- javascript - 如何使用 jAutoCalc 插件将多行动态表写入 Mysql 数据库
- php - 想在swift 4中通过php api上传图片
- java - 如何将 Keras Tokenizer 导入 Java Deeplearning4j (DL4J)
- watson - 沃森数据提炼日期列操作
- android - 如何在本机反应中更改导航标题颜色?