首页 > 解决方案 > 如何修复:无法在未安装的组件 Next.js || 上执行 React 状态更新 onScroll 事件

问题描述

这里的代码

const [scroll, setScroll] = useState(false);

 useEffect(() => {
   window.addEventListener("scroll", () => {
     setScroll(window.scrollY > specify_height_you_want_to_change_after_here);
   });
 }, []);

得到这个错误

警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要解决此问题,请在 useEffect 清理函数中取消所有订阅和异步任务。

标签: next.jsuse-stateonscroll

解决方案


您需要在 useEffect 清理函数中删除事件侦听器。此函数在组件卸载时运行。

useEffect(() => {
  window.addEventListener("scroll", () => {
    setScroll(window.scrollY > specify_height_you_want_to_change_after_here);
  });

  return () => window.removeEventListener("scroll", () => {
    setScroll(window.scrollY > specify_height_you_want_to_change_after_here);
  });
}, []);

为了使您的代码更具可读性,您可能希望将侦听器分离到一个单独的函数中。

useEffect(() => {
  const scrollListener = () => {
    setScroll(window.scrollY > specify_height_you_want_to_change_after_here);
  }

  window.addEventListener("scroll", scrollListener);

  return () => window.removeEventListener('scroll', scrollListener);
}, []);

推荐阅读