开发者问题收集

如何使用 React Hooks 安装组件?

2021-08-27
24
const handleDisplays = () => {
        if (window.scrollY > 0) {
            setNavbar(true)
        } else {
            setNavbar(false)
        }

        if (window.scrollY > 1000) {
            setHelpDisplay(true)
        } else {
            setHelpDisplay(false)
        }

        if (window.scrollY > 1400) {
            setContactDisplay(true)
        } else {
            setContactDisplay(false)
        }

    }

    useEffect(() => {
        window.addEventListener('scroll', handleDisplays)
    }, [])

我有这种方法可以在网站主页滚动时设置动画。它工作正常,但当我转到任何其他组件并滚动页面时,它会抛出此错误:

Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

网站没有崩溃,但很烦人。

我尝试在不使用 useEffect 的情况下编写它,也尝试过:

useEffect(() => {
        return  () => {
            window.addEventListener('scroll', handleDisplays)
        } 
}, [])

但我无法处理它。

我该如何摆脱这个错误?

1个回答

卸载时添加 removeEventListener。

useEffect(() => {
        window.addEventListener('scroll', handleDisplays)
        return  () => {
            window.removeEventListener('scroll', handleDisplays, true)
        } 
}, [])

本博客介绍了如何在 useEffect 中添加或删除事件监听器

Amruth
2021-08-27