如何使用Drei的<View>组件?解决'Hooks只能在Canvas组件内'报错
问题修复方案
报错的核心原因是:Drei的<View>组件内部依赖React Three Fiber的上下文hooks,这些hooks只能在<Canvas>组件内部运行,你现在把<View>放在了<Canvas>外面,导致上下文缺失触发报错。
修复步骤及代码如下:
- 补充导入
View组件(你的代码里漏掉了这一步) - 将
<View>及内部的<Experience>全部移入<Canvas>组件内部,确保它们处于R3F的上下文环境中
修复后的完整代码:
import './style.css' import React from 'react' import ReactDOM from 'react-dom/client' import { Canvas } from '@react-three/fiber' import { View } from '@react-three/drei' // 新增View组件导入 import Experience from './Experience.jsx' import * as THREE from 'three' const root = ReactDOM.createRoot(document.querySelector('#root')) root.render( <Canvas camera={ { fov: 45, near: 0.1, far: 200, position: [ -4, 3, 30 ] } } > {/* 将View移入Canvas内部 */} <View> <Experience/> </View> <View.Port/> </Canvas> )
额外说明:
<View>和<View.Port>是配套使用的,必须都在<Canvas>内部,才能正确建立视图分割的上下文关联- 所有依赖R3F hooks的组件(包括大部分Drei组件)都不能脱离
<Canvas>单独使用,否则都会触发类似的hooks报错
内容的提问来源于stack exchange,提问作者rongxing li
相关产品推荐
相关产品推荐

