0

I was using Three.js in my React Project. I used OBJLoader to render 3D model in my web page, but when I refreshed the page, it occurred an error, which said "TypeError: unhideTextInstance is not a function". But sometimes it worked without displaying any error.

I checked my Chrome inspection, it may relate to the Suspend tag and Provider tag.

Any help would be APPRECIATED!!!

index.js

import React from 'react';
import { createRoot } from 'react-dom/client';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom';
import { store } from './store';
import  App  from './App';
import './index.css';

// setup fake backend
import { fakeBackend } from './helpers';
fakeBackend();

const container = document.getElementById('root');
const root = createRoot(container);

root.render(
    <React.StrictMode>
        <Provider store={store}>
            <BrowserRouter>
                <App />
            </BrowserRouter>
        </Provider>
    </React.StrictMode>
);

App.js

import {
  Routes,
  Route,
  Navigate,
  useNavigate,
  useLocation,
} from "react-router-dom";

import { history } from "./helpers";
import { Nav, PrivateRoute } from "./components";
import { Home } from "./page/home";
import { Login } from "./page/login";
import ObjLoad  from "./components/ObjLoad";
export default function App() {
 
  history.navigate = useNavigate();
  history.location = useLocation();

  return (
    <div>
      <Nav />
      <div>
        <Routes>
          <Route path="/" element={<ObjLoad />} />         
          <Route path="/login" element={<Login />} />
          <Route path="*" element={<Navigate to="/" />} />
        </Routes>
      </div>
    </div>
  );
}

ObjLoad.js

import * as THREE from "three";
import { Canvas, useLoader } from "@react-three/fiber";
import { Environment, OrbitControls } from "@react-three/drei";
import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader";
import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader";
import { DDSLoader } from "three-stdlib";
import { Suspense } from "react";

THREE.DefaultLoadingManager.addHandler(/\.dds$/i, new DDSLoader());

const Scene = () => {
  const materials = useLoader(MTLLoader, "test.mtl");
  const obj = useLoader(OBJLoader, "test.obj", (loader) => {
    materials.preload();
    loader.setMaterials(materials);
  });

  console.log(obj);
  return (
    <>
      <primitive object={obj} scale={0.001} position={[-7,-1,0]} rotation={[0, 0, 0]} />;
      <ambientLight intensity={0.5} /> 
    </>
  );
};

export default function OBJLoad() {
  return (
    <div className="OBJLoad">
      <Canvas>
        <Suspense fallback={<></>}>
          <Scene />
          <OrbitControls />
        </Suspense>
      </Canvas>
    </div>
  );
}

0 Answers0