我不明白为什么当我使用 setTimeout
函数时,我的反应组件开始到无限的 console.log。一切正常,但 PC 开始滞后。
有人说这个函数在超时改变我的状态和重新渲染组件,设置新的计时器等等。现在我需要了解如何清除它是正确的。
export default function Loading() {
// if data fetching is slow, after 1 sec i will show some loading animation
const [showLoading, setShowLoading] = useState(true)
let timer1 = setTimeout(() => setShowLoading(true), 1000)
console.log('this message will render every second')
return 1
}
清除不同版本的代码无助于:
const [showLoading, setShowLoading] = useState(true)
let timer1 = setTimeout(() => setShowLoading(true), 1000)
useEffect(
() => {
return () => {
clearTimeout(timer1)
}
},
[showLoading]
)
原文由 ZiiMakc 发布,翻译遵循 CC BY-SA 4.0 许可协议
定义的
return () => { /*code/* }
函数在useEffect
每次运行时useEffect
运行(组件挂载时第一次渲染除外)和组件卸载时(如果您不再显示组件)。这是一种使用和清除超时或间隔的工作方式:
沙盒示例。
如果您需要清除另一个组件中的超时或间隔:
沙盒示例。
丹·阿布拉莫夫的文章。