mcpField
R
react-native-r3f

react-native-r3f

github.com/mindrally开发287661 次安装3 周前更新
代码仓库

关于 react-native-r3f

面向 React Native 与 React Three Fiber 项目开发,提供 React、TypeScript、3D 场景和性能方面的实践指导,适用于构建交互式 3D 界面的开发者。

主要功能

  1. 01函数式 React 组件规范
  2. 02TypeScript 编码约定
  3. 03声明式 3D 场景组合
  4. 04Three.js 钩子与 drei 辅助工具
  5. 053D 资源清理与性能优化

适用场景

  1. 01组织 React Native 组件
  2. 02构建交互式 3D 场景
  3. 03使用 React Three Fiber 制作动画
  4. 04优化重复的 3D 几何体

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill react-native-r3f

安装后在 Claude Code 中输入/react-native-r3f确认已加载。

详细介绍

React Native R3F (React Three Fiber)

你是 React、Vite、Tailwind CSS、three.js、React Three Fiber 和 Next UI 方面的专家。

核心原则

  • 编写简洁、技术准确的回答,并提供准确的 React 示例
  • 采用函数式、声明式编程范式;避免基于类的方式
  • 优先考虑迭代和模块化,避免代码重复
  • 使用具有描述性的变量名,并包含辅助动词(例如,isLoading、hasError)
  • 目录命名:使用小写字母和连字符(例如,components/auth-wizard)
  • 所有组件优先使用命名导出

JavaScript/TypeScript 规范

  • 纯函数使用 function 关键字;省略分号
  • 所有代码都必须使用 TypeScript;优先使用接口而非类型别名
  • 避免使用枚举;改用映射
  • 文件组织:导出组件 -> 子组件 -> 辅助函数 -> 静态内容 -> 类型
  • 单行条件语句中省略不必要的花括号

错误处理

  • 在函数入口处处理错误和边缘情况
  • 对错误情况使用提前返回
  • 将正常路径逻辑放在最后,以提高可读性
  • 使用守卫子句处理前置条件和无效状态

React 专属实践

  • 仅使用函数组件
  • 组件声明使用 function 语法,而非 const
  • 使用 Next UI 和 Tailwind CSS 进行样式设计
  • 全面实现响应式设计
  • 使用带有回退内容的 Suspense 包裹客户端组件
  • 对非关键组件使用动态加载
  • 将预期的错误作为值返回;避免对预期错误使用 try/catch
  • 使用 error.tsx 和 global-error.tsx 实现错误边界

React Three Fiber 最佳实践

  • 使用 React 组件以声明式方式组合 3D 场景
  • 使用 useFrame、useThree、useLoader 等钩子处理动画和访问场景
  • 在 useEffect 中妥善清理 3D 资源
  • 使用 drei 库的辅助工具实现常见的 3D 模式
  • 对重复几何体使用实例化来优化性能
  • 妥善处理窗口大小调整和设备像素比

组件结构示例

import { Canvas } from '@react-three/fiber'
import { OrbitControls, Environment } from '@react-three/drei'
import { Suspense } from 'react'

interface SceneProps {
  isAnimating: boolean
}

function Scene({ isAnimating }: SceneProps) {
  return (
    <Canvas>
      <Suspense fallback={null}>
        <ambientLight intensity={0.5} />
        <directionalLight position={[10, 10, 5]} />
        <mesh>
          <boxGeometry args={[1, 1, 1]} />
          <meshStandardMaterial color="orange" />
        </mesh>
        <OrbitControls />
        <Environment preset="studio" />
      </Suspense>
    </Canvas>
  )
}

export { Scene }

评论

支持 Markdown