如何修复:Can';t在未安装的组件Next.js | | onScroll事件上执行反应状态更新

如何修复:Can';t在未安装的组件Next.js | | onScroll事件上执行反应状态更新,next.js,use-state,onscroll,Next.js,Use State,Onscroll,这是密码 const [scroll, setScroll] = useState(false); useEffect(() => { window.addEventListener("scroll", () => { setScroll(window.scrollY > specify_height_you_want_to_change_after_here); }); }, []); 获取此错误 警告:无法对未安装的组件执行

这是密码

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

 useEffect(() => {
   window.addEventListener("scroll", () => {
     setScroll(window.scrollY > specify_height_you_want_to_change_after_here);
   });
 }, []);
获取此错误


警告:无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理功能中的所有订阅和异步任务。

您需要删除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);
}, []);