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

如何使用Drei的<View>组件?解决'Hooks只能在Canvas组件内'报错

问题修复方案

报错的核心原因是:Drei的<View>组件内部依赖React Three Fiber的上下文hooks,这些hooks只能在<Canvas>组件内部运行,你现在把<View>放在了<Canvas>外面,导致上下文缺失触发报错。

修复步骤及代码如下:

  1. 补充导入View组件(你的代码里漏掉了这一步)
  2. 将<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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:47:37