useEffect清除副作用带第二个参数,反而可以正常清除定时器?求解疑
先描述一下,
看文档上写清除副作用只需要返回一个函数即可,相当于componentWillUnmount
使用的代码
let timer: any
const afterChartCreated = (reChart) => {
if (reChart) {
timer = window.setTimeout(() => {
console.log('定时器')
const data = reChart.getCSV();
setchartData(data);
}, 5000);
}
};
我以为清除方式:立即清除了好像,‘定时器’没有打印
useEffect(() => {
return () => {
clearInterval(timer)
}
})
实际生效的方式:
useEffect(() => {
return () => {
clearInterval(timer)
}
}, [])
我的疑惑点:
1:第二个参数为[],时候不是相当于componentDidMount
嘛,怎么反而清除,并且代码也执行了?
2:为什么我以为的清除方式,没有启用成功定时器?
描述的有点乱,希望大佬解疑
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我的理解
useEffect 第二个参数必须要有,至少都要写个空数组,如果是空数组就可以理解成 didmount
第二个参数可以理解为监听的变量,在第二个参数里的变量改变时会执行第一个方法
第一个方法的返回值在监听空数组的时候是 didunmount