切换组件渲染页面时,控制台提示需要cleanup function,一般造成这种提示的原因是计时器没有及时清除造成的内存泄露。setTimeout在执行完后会自动销毁,不需要手动销毁;setInterval不会自动销毁,需手动销毁。但是在快速切换组件时,使用setTimeout也有可能报上述错误,原因就是计时器销毁不及时,所以需要在页面销毁时,添加手动销毁计时器的代码。
解决方法:
let timerT
let timerL
useEffect(() => {
timerT = setTimeout(() => {
// 操作
}, seconds)
timerL = setInterval(() => {
// 操作
}, seconds)
return () => { // 页面销毁时触发
timerT && clearTimeout(timerT)
timerL && clearInterval(timerL)
}
}, [])