Token导航 LogoToken导航TokenDH.com
开发规范需要联网github未标认证来源可访问clear审计通过

r3f-best-practicesr3f 最佳实践

Agent Skill

r3f-best-practices 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

10,466

周安装

445

GitHub Stars

19

下载量

3,667
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

3

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:r3f-best-practices(r3f 最佳实践)
来源仓库:https://github.com/emalorenzo/three-agent-skills
仓库路径:skills/r3f-best-practices
安装命令:
npx skills add https://github.com/emalorenzo/three-agent-skills --skill r3f-best-practices
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/emalorenzo/three-agent-skills --skill r3f-best-practices

简介

用于跨 70 多个规则优化 React Three Fiber 和 Poimandres 生态系统代码的综合指南。

  • 涵盖 12 个优先级类别,从性能到重新渲染(关键),再到物理和调试工具,并提供规则前缀以供快速参考
  • 强调避免在 useFrame 中使用 setState、隔离 React 状态、使用 Zustand 选择器以及记住昂贵的组件以防止过度重新渲染
  • 包括具有增量时间的 useFrame 动画模式、Drei 助手(useGLTF、useTexture、环境)、Suspense 加载和后处理效果
  • 提供常见陷阱的代码示例:直接引用突变而不是状态更新、可见性切换而不是重新安装以及连续值的瞬时订阅

SKILL.md

React Three Fiber Best Practices

Comprehensive guide for React Three Fiber and the Poimandres ecosystem. Contains 70+ rules across 12 categories, prioritized by impact.

Sources & Credits

Additional tips from 100 Three.js Tips by Utsubo

When to Apply

Reference these guidelines when:

  • Writing new R3F components
  • Optimizing R3F performance (re-renders are the #1 issue)
  • Using Drei helpers correctly
  • Managing state with Zustand
  • Implementing post-processing or physics

Ecosystem Coverage

  • @react-three/fiber - React renderer for Three.js
  • @react-three/drei - Useful helpers and abstractions
  • @react-three/postprocessing - Post-processing effects
  • @react-three/rapier - Physics engine
  • zustand - State management
  • leva - Debug GUI

Rule Categories by Priority

PriorityCategoryImpactPrefix
1Performance & Re-rendersCRITICALperf-
2useFrame & AnimationCRITICALframe-
3Component PatternsHIGHcomponent-
4Canvas & SetupHIGHcanvas-
5Drei HelpersMEDIUM-HIGHdrei-
6Loading & SuspenseMEDIUM-HIGHloading-
7State ManagementMEDIUMstate-
8Events & InteractionMEDIUMevents-
9Post-processingMEDIUMpostpro-
10Physics (Rapier)LOW-MEDIUMphysics-
11Leva (Debug GUI)LOWleva-

Quick Reference

1. Performance & Re-renders (CRITICAL)

  • perf-never-set-state-in-useframe - NEVER call setState in useFrame
  • perf-isolate-state - Isolate components that need React state
  • perf-zustand-selectors - Use Zustand selectors, not entire store
  • perf-transient-subscriptions - Use transient subscriptions for continuous values
  • perf-memo-components - Memoize expensive components
  • perf-keys-for-lists - Use stable keys for dynamic lists
  • perf-avoid-inline-objects - Avoid creating objects/arrays in JSX
  • perf-dispose-auto - Understand R3F auto-dispose behavior
  • perf-visibility-toggle - Toggle visibility instead of remounting
  • perf-r3f-perf - Use r3f-perf for performance monitoring

2. useFrame & Animation (CRITICAL)

  • frame-priority - Use priority for execution order
  • frame-delta-time - Always use delta for animations
  • frame-conditional-subscription - Disable useFrame when not needed
  • frame-destructure-state - Destructure only what you need
  • frame-render-on-demand - Use invalidate() for on-demand rendering
  • frame-avoid-heavy-computation - Move heavy work outside useFrame

3. Component Patterns (HIGH)

  • component-jsx-elements - Use JSX for Three.js objects
  • component-attach-prop - Use attach for non-standard properties
  • component-primitive - Use primitive for existing objects
  • component-extend - Use extend() for custom classes
  • component-forwardref - Use forwardRef for reusable components
  • component-dispose-null - Set dispose={null} on shared resources

4. Canvas & Setup (HIGH)

  • canvas-size-container - Canvas fills parent container
  • canvas-camera-default - Configure camera via prop
  • canvas-gl-config - Configure WebGL context
  • canvas-shadows - Enable shadows at Canvas level
  • canvas-frameloop - Choose appropriate frameloop mode
  • canvas-events - Configure event handling
  • canvas-linear-flat - Use linear/flat for correct colors

5. Drei Helpers (MEDIUM-HIGH)

  • drei-use-gltf - useGLTF with preloading
  • drei-use-texture - useTexture for texture loading
  • drei-environment - Environment for realistic lighting
  • drei-orbit-controls - OrbitControls from Drei
  • drei-html - Html for DOM overlays
  • drei-text - Text for 3D text
  • drei-instances - Instances for optimized instancing
  • drei-use-helper - useHelper for debug visualization
  • drei-bounds - Bounds to fit camera
  • drei-center - Center to center objects
  • drei-float - Float for floating animation

6. Loading & Suspense (MEDIUM-HIGH)

  • loading-suspense - Wrap async components in Suspense
  • loading-preload - Preload assets with useGLTF.preload
  • loading-use-progress - useProgress for loading UI
  • loading-lazy-components - Lazy load heavy components
  • loading-error-boundary - Handle loading errors

7. State Management (MEDIUM)

  • state-zustand-store - Create focused Zustand stores
  • state-avoid-objects-in-store - Be careful with Three.js objects
  • state-subscribeWithSelector - Fine-grained subscriptions
  • state-persist - Persist state when needed
  • state-separate-concerns - Separate stores by concern

8. Events & Interaction (MEDIUM)

  • events-pointer-events - Use pointer events on meshes
  • events-stop-propagation - Prevent event bubbling
  • events-cursor-pointer - Change cursor on hover
  • events-raycast-filter - Filter raycasting
  • events-event-data - Understand event data structure

9. Post-processing (MEDIUM)

  • postpro-effect-composer - Use EffectComposer
  • postpro-common-effects - Common effects reference
  • postpro-selective-bloom - SelectiveBloom for optimized glow
  • postpro-custom-shader - Create custom effects
  • postpro-performance - Optimize post-processing

10. Physics Rapier (LOW-MEDIUM)

  • physics-setup - Basic Rapier setup
  • physics-body-types - dynamic, fixed, kinematic
  • physics-colliders - Choose appropriate colliders
  • physics-events - Handle collision events
  • physics-api-ref - Use ref for physics API
  • physics-performance - Optimize physics

11. Leva (LOW)

  • leva-basic - Basic Leva usage
  • leva-folders - Organize with folders
  • leva-conditional - Hide in production

How to Use

Read individual rule files for detailed explanations and code examples:

rules/perf-never-set-state-in-useframe.md
rules/drei-use-gltf.md
rules/state-zustand-selectors.md

Full Compiled Document

For the complete guide with all rules expanded: ../R3F_BEST_PRACTICES.md

Critical Patterns

NEVER setState in useFrame

// BAD - 60 re-renders per second!
function BadComponent() {
  const [position, setPosition] = useState(0);
  useFrame(() => {
    setPosition(p => p + 0.01); // NEVER DO THIS
  });
  return <mesh position-x={position} />;
}

// GOOD - Mutate refs directly
function GoodComponent() {
  const meshRef = useRef();
  useFrame(() => {
    meshRef.current.position.x += 0.01;
  });
  return <mesh ref={meshRef} />;
}

Zustand Selectors

// BAD - Re-renders on ANY store change
const store = useGameStore();

// GOOD - Only re-renders when playerX changes
const playerX = useGameStore(state => state.playerX);

// BETTER - No re-renders, direct mutation
useFrame(() => {
  const { value } = useStore.getState();
  ref.current.position.x = value;
});

Drei useGLTF

import { useGLTF } from '@react-three/drei';

function Model() {
  const { scene } = useGLTF('/model.glb');
  return <primitive object={scene} />;
}

// Preload for instant loading
useGLTF.preload('/model.glb');

Suspense Loading

function App() {
  return (
    <Canvas>
      <Suspense fallback={<Loader />}>
        <Model />
      </Suspense>
    </Canvas>
  );
}

r3f-perf Monitoring

import { Perf } from 'r3f-perf';

function App() {
  return (
    <Canvas>
      <Perf position="top-left" />
      <Scene />
    </Canvas>
  );
}

Toggle Visibility (Not Remounting)

// BAD: Remounting destroys and recreates
{showModel && <Model />}

// GOOD: Toggle visibility, keeps instance alive
<Model visible={showModel} />

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

04

需要参考平台分布和安装热度时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Claude Code

30.33%
按下载量换算1,112

Cursor

22.52%
按下载量换算826

OpenCode

17.09%
按下载量换算627

Gemini CLI

14.4%
按下载量换算528

Antigravity

7.63%
按下载量换算280

Codex

3.27%
按下载量换算120

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

来源信息

继续浏览同类 Skills