You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js用react-cool-inview实现懒加载跳转时出现状态更新警告

问题原因

该警告是路由跳转后Footer组件已卸载,但react-cool-inview的监听逻辑未被清理,后续触发状态更新时指向了已销毁的组件实例导致。你当前仅在元素进入视口的onEnter回调中执行了unobserve,如果组件在元素进入视口前就被卸载(比如用户快速切走页面),监听器会一直残留,触发回调时就会报这个内存泄漏警告。同时你的代码还存在变量名笔误,useInView返回的是驼峰命名的inView,你写的小写inview会导致懒加载内容无法正常渲染。

修复代码

import React, { useEffect } from "react";
import "./style.scss";
import useInView from "react-cool-inview";
import { Link } from 'routers';

const Footer = () => {
  // 额外解构出unobserve方法用于卸载时清理
  const { observe, inView, unobserve } = useInView({
    onEnter: ({ unobserve }) => unobserve(),
  });

  // 增加卸载清理逻辑
  useEffect(() => {
    return () => unobserve();
  }, [unobserve]);
 
  return (
    <div className="footer pt-4 pb-5" ref={observe}>
      {/* 修正变量名笔误 */}
      {inView && "something"}
    </div>
  );
};

export default React.memo(Footer);

修复说明

  • useEffect的清理函数会在组件卸载时自动执行,不管元素有没有进入过视口,都能保证监听器被正确移除,不会残留异步更新逻辑
  • react-cool-inview的unobserve方法是幂等的,多次调用不会产生副作用,所以和onEnter里的调用不会冲突
  • 修正变量名后懒加载逻辑可以正常触发

内容的提问来源于stack exchange,提问作者Khiêm Lê Đình

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:36:02