我的应用程序.jsx
import "./App.css";
import { Canvas } from "@react-three/fiber";
import React, { Suspense } from "react";
import { Html, useProgress } from "@react-three/drei";
const Scene = React.lazy(() => import('./components/Scene.jsx'));
function Loader() {
const { progress } = useProgress();
return <Html center>{progress} % loaded</Html>
}
function App() {
return (
<div id="canvas">
<Canvas>
<Suspense fallback={<Loader />}>
<Scene />
</Suspense>
</Canvas>
</div>
);
}
export default App;
我的场景.jsx
function Scene() {
<>
<ambientLight intensity={0.2} />
<directionalLight />
<GizmoHelper
alignment="bottom-right"
margin={[80, 80]}
>
<GizmoViewport
axisColors={["red", "green", "blue"]}
labelColor="black"
/>
</GizmoHelper>
<Text
position={[-3, 0, 0]}
anchorX="center"
anchorY="middle"
fontSize="1.5"
outLineBlur="5"
outlineColor="red"
curveRadius="2.9"
font="db.onlinewebfonts.com/t/02654c5f87934978cd2129477ad40869.ttf">
Hello world
<meshStandardMaterial
color="#ec2d2d"
opacity="1"
roughness="0"
metalness="0.3"
normalMap={normalMap}
/>
</Text>
<OrbitControls />
<Environment preset="city" background="true" />
</>
);
}
我的问题:
每次我启动应用程序时,环境都不会加载,并且出现以下错误:
Warning: Cannot update a component (`Loader`) while rendering a different component (`Environment`)
如果我在实时服务器运行时更改预设,环境会立即更新并显示。
我已经尝试编写一个函数并仅在加载窗口时渲染环境,但我仍然遇到相同的错误。
我在某处读过我可以使用 setTimeout 但不确定这是否是正确的方法。
如果有人能指出我正确的方向。
更新:
我没有包括我正在使用 GizmoHelper 组件的事实。从场景中移除 GizmoHelper 解决了这个问题。我在上面的代码中添加了 GizmoHelper,以防其他人遇到同样的问题。
进一步更新:
我注意到错误仍然记录在控制台中,但现在它不再影响环境的初始渲染。不过,可能仍然会导致进一步的问题。