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

Next 14服务端应用报错:useInView is not a function 如何解决?

解决Next 14中useInView is not a function错误

核心原因

Next 14默认将组件作为服务端组件渲染,但useInView是依赖浏览器IntersectionObserver API的客户端Hook,无法在服务端环境中运行,同时服务端组件不允许使用客户端Hook,这是报错的主要原因。

解决方案

1. 标记组件为客户端组件

在组件文件顶部添加'use client'指令,强制组件在客户端渲染,同时要把useInView返回的ref绑定到需要监控的元素上:

'use client'; // 必须添加这一行
import Image from "next/image";
import { useInView } from "react-intersection-observer";

function LoadMore() {
    const { ref, inView } = useInView();
    // 可根据inView状态实现加载更多逻辑
    return (
        <>
            <section className="flex justify-center items-center w-full">
                <div ref={ref}> {/* 将ref绑定到目标元素 */}
                    <Image 
                        src="./spinner.svg" 
                        alt="spinner"
                        width={56}
                        height={56}
                        className="object-contain"
                    />
                </div>
            </section>
        </>
    );
}

export default LoadMore;

2. 确认依赖包正确安装

如果未安装react-intersection-observer,执行对应命令安装:

npm install react-intersection-observer
# 或
yarn add react-intersection-observer
pnpm add react-intersection-observer

3. 验证包版本兼容性

确保使用的react-intersection-observer版本在v8.0.0及以上(该版本开始支持useInView Hook),可查看package.json确认:

{
  "dependencies": {
    "react-intersection-observer": "^9.5.3" // 版本需>=8.0.0
  }
}

版本过低则执行更新:

npm update react-intersection-observer

补充说明

useInView的核心作用是监听元素是否进入视口,必须将返回的ref绑定到目标DOM元素上才能正常工作,之后你可以基于inView状态触发加载更多等业务逻辑。

内容的提问来源于stack exchange,提问作者Jone Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:35:25