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

React 18 + Next.js TypeScript项目集成React Three Fiber遇'ReactCurrentOwner'未定义错误求助

React 18 + Next.js TypeScript项目集成React Three Fiber遇'ReactCurrentOwner'未定义错误求助

嘿,这个错误我之前在React 18 + Next.js的项目里也踩过坑!给你几个亲测有效的排查和解决方向,你可以挨个试试:

  • 锁死兼容React 18的R3F稳定版本
    你说不能用alpha版(确实要React 19),那直接装适配React 18的最后几个稳定版就行,我当时用的是:

    npm install @react-three/fiber@8.15.12 @react-three/drei@9.92.7
    

    (用yarn或pnpm的话把npm换成对应命令就行),这两个版本完全兼容React 18,不会触发ReactCurrentOwner的问题。

  • 确保所有R3F相关组件都是客户端组件
    你已经加了"use client"指令,这个是对的,但要注意:如果你的Overview.tsx是被服务器组件导入的,一定要保证R3F的所有渲染逻辑都在客户端组件里,别把Canvas这类R3F组件放到服务器组件里渲染,Next.js的App Router对服务器/客户端组件的边界卡得很严。

  • 统一React和ReactDOM的版本
    有时候项目里的react和react-dom版本不一致也会搞出这种奇怪的错误,你可以先跑个命令看看:

    npm list react react-dom
    

    如果看到版本不一样,就统一装18.2.0的稳定版:

    npm install react@18.2.0 react-dom@18.2.0
    
  • 清理缓存+重启项目
    别小看缓存的问题!我当时就是删了缓存才好的:

    1. 删掉项目根目录的node_modules文件夹和package-lock.json(yarn用户删yarn.lock)
    2. 重新跑npm install
    3. 彻底关掉Next.js的dev服务器,再重新启动npm run dev
  • 检查Next.js版本
    尽量用13.4.0以上的App Router稳定版,早期的13.x版本对客户端组件的兼容有bug,容易和R3F冲突。

对了,给你贴个我当时能用的Overview.tsx示例,你可以对比下自己的代码有没有问题:

"use client";

import { Canvas } from "@react-three/fiber";
import { Box, OrbitControls } from "@react-three/drei";

export default function Overview() {
  return (
    <div style={{ width: "100%", height: "600px" }}>
      <Canvas camera={{ position: [5, 5, 5] }}>
        <ambientLight intensity={0.5} />
        <directionalLight position={[3, 5, 2]} />
        <Box position={[0, 0, 0]}>
          <meshStandardMaterial color="#42a5f5" />
        </Box>
        <OrbitControls />
      </Canvas>
    </div>
  );
}

按这几步来,应该能解决这个问题!

备注:内容来源于stack exchange,提问作者Wer Wer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:35:33