首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用drei?

如何正确使用drei?
EN

Stack Overflow用户
提问于 2022-03-23 15:18:53
回答 2查看 3.8K关注 0票数 2

我想我是在遵循react-三个文档和许多其他示例,但无法像其他人那样让drei useGLTF工作。

我有一个简单的,从零开始,下一个反应-反应-三/纤维项目。我只是试着加载宇航员的例子并显示出来。

我相信下面的代码确实工作了一段时间。经过一些微小的更改和撤消之后,我想我回到了相同的代码中,而这段代码现在不能工作了。(我已经试过了,没有悬念。)

代码语言:javascript
复制
import { Canvas, Suspense } from '@react-three/fiber'
import { useGLTF } from '@react-three/drei'

function Model() {
  const gltf = useGLTF('https://thinkuldeep.com/modelviewer/Astronaut.glb')
  return (<primitive object={gltf.scene} />)
}

export default function Home() {
  return (
    <div>
      {/* <Suspense> */}
        <Canvas>
          <ambientLight />
          <Model />
        </Canvas>
      {/* </Suspense> */}
    </div>
  )
}

下面是控制台消息:

这是我的package.json:

代码语言:javascript
复制
{
  "name": "cfgnext",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "@react-three/drei": "^8.18.10",
    "@react-three/fiber": "^7.0.26",
    "next": "12.1.0",
    "react": "17.0.2",
    "react-dom": "^17.0.2",
    "styled-components": "^5.3.3"
  },
  "devDependencies": {
    "eslint": "8.11.0",
    "eslint-config-next": "12.1.0"
  }
}

从我所读到的一切来看,这应该是相当简单的。有人能告诉我我哪里出错了吗。

蒂娅,比尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-01 13:39:27

我更新了react,纤维和drei的最新版本。这使得我原来的发布代码工作正常(使用react中的悬念)。这就是改变的原因:悬念。

代码语言:javascript
复制
import { Suspense } from 'react'
import { Canvas } from '@react-three/fiber'
import { useGLTF } from '@react-three/drei'

function Model() {
  const gltf = useGLTF('https://thinkuldeep.com/modelviewer/Astronaut.glb')
  return (<primitive object={gltf.scene} />)
}

export default function Home() {
  return (
    <div>
      <Suspense>
        <Canvas>
          <ambientLight />
          <Model />
        </Canvas>
      </Suspense>
    </div>
  )
}

下面是我使用的版本:

代码语言:javascript
复制
{
  "name": "cfgnext-updated",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "@react-three/drei": "^9.0.1",
    "@react-three/fiber": "^8.0.6",
    "next": "12.1.4",
    "react": "18.0.0",
    "react-dom": "18.0.0"
  },
  "devDependencies": {
    "eslint": "8.12.0",
    "eslint-config-next": "12.1.4"
  }
}
票数 3
EN

Stack Overflow用户

发布于 2022-03-29 21:09:53

我的Suspense非常相似,但我更愿意用不同的方法

代码语言:javascript
复制
<Suspense fallback={null}>
  <Model src={src} containerRef={containerRef.current} />
</Suspense>

此外,我还添加了一个错误边界,以防止由于呈现而造成的任何崩溃。

代码语言:javascript
复制
import { withErrorBoundary } from 'react-error-boundary';

// ...

export default withErrorBoundary(ModelViewer, {
  FallbackComponent: () => (<div>An error occured</div>),
  onError: (err: Error, info: {componentStack: string}) => console.error(err, info),
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71589738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档