Javascript 如何删除组件卸载时的事件侦听器?

Javascript 如何删除组件卸载时的事件侦听器?,javascript,reactjs,Javascript,Reactjs,我在handleSlide函数中每2秒记录一次控制台日志,我希望它在每次安装组件时都运行 const handleSlide = () => { setInterval(() => { console.log('runs'); }, 2000); }; useEffect(() => { window.addEventListener('load', handleSlide);

我在handleSlide函数中每2秒记录一次控制台日志,我希望它在每次安装组件时都运行

    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秒运行一次