Javascript 如何删除组件卸载时的事件侦听器?
我在handleSlide函数中每2秒记录一次控制台日志,我希望它在每次安装组件时都运行Javascript 如何删除组件卸载时的事件侦听器?,javascript,reactjs,Javascript,Reactjs,我在handleSlide函数中每2秒记录一次控制台日志,我希望它在每次安装组件时都运行 const handleSlide = () => { setInterval(() => { console.log('runs'); }, 2000); }; useEffect(() => { window.addEventListener('load', handleSlide);
const handleSlide = () => {
setInterval(() => {
console.log('runs');
}, 2000);
};
useEffect(() => {
window.addEventListener('load', handleSlide);
return () => {
return window.removeEventListener('load', handleSlide);
};
}, []);
问题是handleSlide函数在卸载后仍然运行,我在其他页面和组件上也看到了控制台日志
当组件卸载时,如何删除react js中的事件侦听器?您需要存储并清除间隔:
let interval;
const handleSlide = () => {
interval = setInterval(() => {
console.log('runs');
}, 2000);
};
useEffect(() => {
window.addEventListener('load', handleSlide);
return () => {
clearInterval(interval)
};
}, []);
您需要存储并清除间隔:
let interval;
const handleSlide = () => {
interval = setInterval(() => {
console.log('runs');
}, 2000);
};
useEffect(() => {
window.addEventListener('load', handleSlide);
return () => {
clearInterval(interval)
};
}, []);
您并没有真正删除间隔。handleSlide函数注册匿名setInterval。你可以打电话来澄清。但是,您需要传递一个ID,以便由返回 您的代码可能如下所示
yourID = setInterval(() => {
console.log('runs');
}, 2000);
然后在你的电话里
clearInterval(yourID)
您并没有真正删除间隔。handleSlide函数注册匿名setInterval。你可以打电话来澄清。但是,您需要传递一个ID,以便由返回 您的代码可能如下所示
yourID = setInterval(() => {
console.log('runs');
}, 2000);
然后在你的电话里
clearInterval(yourID)
您正在使用setInterval,安装时它每2秒运行一次。您需要一个回调函数来在特定条件下清除它。您的间隔每2秒运行一次。您使用的是setInterval,安装时它每2秒运行一次。您需要一个回调函数来在特定条件下清除它。您的间歇时间每2秒运行一次