我在使用 useState 和 useEffect 挂钩时遇到问题
import { useState, useEffect } from "react";
const counter = ({ count, speed }) => {
const [inc, setInc] = useState(0);
useEffect(() => {
const counterInterval = setInterval(() => {
if(inc < count){
setInc(inc + 1);
}else{
clearInterval(counterInterval);
}
}, speed);
}, [count]);
return inc;
}
export default counter;
上面的代码是一个计数器组件,它在 props 中接受计数,然后用 0 初始化 inc 并递增它直到等于计数
问题是每次我得到 0 时,我都没有在 useEffect 和 setInterval 的回调中得到 inc 的更新值,所以它将 inc 呈现为 1 并且 setInterval 永远不会变得清晰。我认为公司必须关闭使用 useEffect 和 setInterval 的回调,所以我必须在那里获取更新公司,所以这可能是一个错误?
我不能在依赖项中传递 inc(在其他类似问题中建议这样做),因为在我的例子中,我在 useEffect 中设置了 setInterval,因此在依赖项数组中传递 inc 会导致无限循环
我有一个使用有状态组件的工作解决方案,但我想使用功能组件来实现
原文由 Abhay Sehgal 发布,翻译遵循 CC BY-SA 4.0 许可协议
有几个问题:
useEffect
返回一个函数来清除间隔inc
值不同步,因为您没有使用inc
的先前值。一种选择:
另一种选择是将
inc
包含在 deps 数组中,这使事情变得更简单,因为您不需要使用之前的inc
内部setInc
:901af-51还有 第三种 方法更简单:包括
inc
在 deps 数组中,如果inc >= count
,在调用之前提前返回setInterval