Я недавно начал использовать реагирующее три-волокно и обнаружил этот пример , где изображение svg загружается через компонент, а не напрямую в функцию. Я хотел использовать эту идею, так как хочу повторно использовать один и тот же компонент, но реализовать разные URL для загрузки разных текстур.
Я попытался скопировать то, что сделал этот пример, но он продолжает выдавать ошибку: Невозможно получить / undefined Вот мой код:
import * as THREE from "three";
import ReactDOM from 'react-dom'
import React, { Suspense, useState, useRef, useEffect, useMemo } from 'react'
import { Canvas, extend, useLoader, useThree, useFrame } from 'react-three-fiber'
function Box(props, {url}) {
const [texture] = useLoader(THREE.TextureLoader, url);
const mesh = useRef()
const [hover, setHover] = useState(false)
return (
<mesh
{...props}
ref={mesh}
castShadow
rotation={props.rotation}
scale={hover ? [1.2, 1, 1.2] : [1, 1, 1]}
onPointerOver={e => setHover(true)}
onPointerOut={e => setHover(false)}>
<boxBufferGeometry attach="geometry" args={[130,.1,120]} />
<meshStandardMaterial attach="material" map = {texture} transparent = {true} />
</mesh>
)
}
function App() {
return (
<Canvas camera={{ position: [5,300,0],
fov:60,
aspect: window.innerWidth / window.innerHeight,
near:1,
far: 1000 }}>
<Suspense fallback={null}>
<Box position={[150, 10, -340]} rotation = {[0, Math.PI/2,0]} url = {['../../URL']}/>
<Box position={[0, 0, 0]} />
</Suspense>
<directionalLight position = {[1,1,1]} intensity = {[1.7]}/>
</Canvas>
)
}
ReactDOM.render(<App />, document.getElementById('root'))
Я также попытался передать URL через props.url
вместо использования только url
, но это также происходит с похожей ошибкой, и я не знаю, как это исправить. Я просмотрел документы здесь для реагирования с тремя волокнами, и кажется, что это работает только для других загрузчиков? такие как Драко или GLTF. Но я не знаю, почему это не будет работать для TextureLoader.
РЕДАКТИРОВАТЬ: Полная ошибка:
Так что это не самая полезная ошибка, поскольку она создает отдельный html страница, говорящая, что это не может получить / неопределено. Это как-то связано с передачей URL-адреса, так как, если я напрямую реализую полный URL-адрес внутри функции, все работает нормально. Но я не хочу создавать так много разных функций. Я посмотрел здесь с кем-то с похожей ошибкой, и он предположил, что, возможно, Javascript установил мой sr c на undefined? Но этого не должно быть, поскольку он прекрасно работает, если URL не передается через реквизит. Так что я предполагаю, что мой синтаксис неправильный, но я не знаю, как его исправить.