【发布时间】:2019-08-29 00:06:12
【问题描述】:
我有一个函数 react 组件,它有一个从 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
这里是codeandbox的链接:link
【问题讨论】:
-
setState()是异步的... -
不要认为这很重要。
-
setCount(--count )有效。可能是最好的方法,也可能不是?这是一个关闭问题 -
将计数设置为依赖项并使用 setTimeout 将解决您的痛苦:)。因为下次渲染时会在count有新值时再次调用setTimeout
标签: javascript reactjs react-hooks