react-three-fiber新增滚动区域报Uncaught Div is not part of the THREE namespace错误如何解决
错误产生原因
Uncaught Div is not part of the THREE namespace! Did you forget to extend? 是@react-three/fiber(R3F)框架的典型报错:
<Canvas>组件的内部作用域只识别Three.js相关对象和你主动注册扩展的组件,你在<Canvas>内部嵌套了原生HTML标签(比如<div>、<span>等)时,R3F无法识别这类DOM元素,就会抛出该错误。
从你提供的App代码看,<Canvas>内部仅引入了<Intro>和<About>两个自定义组件,说明这两个组件的内部代码直接写了原生HTML标签,没有做兼容处理。
修复方案
你要实现滚动驱动3D场景的效果,且已经在App中预定义了挂载原生内容的domContent ref,直接用@react-three/drei提供的<Html>组件处理即可,步骤如下:
- 第一步:在Intro.js、About.js两个组件的头部引入Html组件
import { Html } from '@react-three/drei'
- 第二步:分别修改两个组件的返回内容,把所有原生HTML内容用
<Html>标签包裹,并且把你传入的domContent赋值给Html的portal属性,示例写法如下:
// Intro 组件修改示例 function Intro({ domContent }) { return ( {/* 其他Three.js相关组件可以放在Html外部 */} <Html portal={domContent}> {/* 把原来写的所有div、文本等原生HTML内容放在这里 */} <div className="intro-content"> <h1>页面标题</h1> <p>介绍内容</p> </div> </Html> ) }
- (可选)如果还未安装@react-three/drei,执行安装命令即可:
npm install @react-three/drei
内容的提问来源于stack exchange,提问作者Jeoffrey Duke
相关产品推荐
相关产品推荐

