Обновлено: 2026-06-10
Пошаговое руководство по подключению React Three Fiber в проекте на Next.js App Router. Уникальная ценность — настройка под наш стек и типичные подводные камни.
npm install three @react-three/fiber @react-three/drei
R3F использует WebGL и не работает на сервере. Импортируйте Canvas только на клиенте:
"use client";
import dynamic from "next/dynamic";
const Canvas = dynamic(
() => import("@react-three/fiber").then((mod) => mod.Canvas),
{ ssr: false }
);
Создайте компонент сцену с директивой "use client" и используйте динамический Canvas:
// app/demo/Scene.tsx
"use client";
import dynamic from "next/dynamic";
const Canvas = dynamic(
() => import("@react-three/fiber").then((mod) => mod.Canvas),
{ ssr: false }
);
export default function Scene() {
return (
<div className="h-[400px] w-full">
<Canvas>
<ambientLight intensity={0.5} />
<pointLight position={[10, 10, 10]} />
<mesh>
<boxGeometry args={[1, 1, 1]} />
<meshStandardMaterial color="orange" />
</mesh>
</Canvas>
</div>
);
}
Страница может оставаться серверным компонентом — сцена рендерится на клиенте:
// app/demo/page.tsx
import Scene from "./Scene";
export default function DemoPage() {
return (
<main>
<h1>3D демо</h1>
<Scene />
</main>
);
}
h-[400px], min-h-screen и т.п.), иначе сцена не отрисуется.<Suspense fallback={<div>Загрузка...</div>}>.frameloop="demand" для статичных сцен.