跳到正文
cccskills
免费在 GitHub 公开

r3f-best-practices

Write, review, and optimize React Three Fiber code for 3D scenes in React. Apply prioritized guidance on unnecessary re-renders, animation loops, model loading, state management, visual effects, and physics across the Poimandres ecosystem.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

React Three Fiber (R3F) and Poimandres ecosystem best practices. Use when writing, reviewing, or optimizing R3F code. Triggers on tasks involving @react-three/fiber, @react-three/drei, zustand, @react-three/postprocessing, @react-three/rapier, or leva.

查看安装方法

适用场景

  • Reviewing unnecessary re-renders in 3D scenes
  • Improving animation update code
  • Setting up model loading and loading indicators
  • Reviewing state management and physics code

包含的文件(9)

  • SKILL.md7.8 KB
  • rules/_sections.md1.9 KB
  • rules/drei-use-gltf.md3.0 KB
  • rules/frame-delta-time.md2.7 KB
  • rules/loading-suspense.md3.6 KB
  • rules/perf-never-set-state-in-useframe.md2.6 KB
  • rules/perf-r3f-perf.md1.9 KB
  • rules/perf-visibility-toggle.md1.9 KB
  • rules/perf-zustand-selectors.md3.0 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

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} />

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Get a simulated peer review of a paper, abstract, or selected sections. Receive assessments of originality, methods, results, and writing, with specific revision suggestions, severity ratings, and a prioritized checklist for improving the manuscript.

中文简介正在准备中。当前显示英语简介。

  • Run a simulated peer review before submitting a paper
  • Check whether methods and conclusions are adequately supported
  • Review an abstract for novelty and clarity
zebbern/claude-code-guide46702026年10月20日 更新

Guide Windows domain penetration testing through Active Directory reconnaissance, credential attacks, privilege escalation, and certificate service checks. Use references for tools such as BloodHound and Impacket to examine attack paths and understand testing prerequisites.

中文简介正在准备中。当前显示英语简介。

  • Planning Active Directory penetration tests
  • Investigating attack paths with BloodHound
  • Reviewing Kerberos and NTLM authentication risks
zebbern/claude-code-guide46702026年10月20日 更新

Test REST, SOAP, and GraphQL APIs for authentication flaws, improper access to other users’ records, and unsafe input handling. Guides endpoint discovery and request variations to identify vulnerabilities and document evidence of unauthorized access.

中文简介正在准备中。当前显示英语简介。

  • Discovering API endpoints for security testing
  • Checking access to other users’ records
  • Assessing GraphQL schemas and query handling
zebbern/claude-code-guide46702026年10月20日 更新

Explores alternative APIs, the interfaces other code uses to call a module. Parallel sub-agents develop distinctly different designs, then present signatures, usage examples, and trade-offs to help choose or combine an approach before implementation.

中文简介正在准备中。当前显示英语简介。

  • Comparing API designs before implementation
  • Weighing simplicity against flexibility
  • Reviewing interfaces from the caller's perspective
zebbern/claude-code-guide46702026年10月20日 更新

Trace system behavior across code, APIs, authentication, data, and networks through an interactive workflow. Store steps, branches, and findings in SQLite, then export diagrams and documentation for security audits, debugging, architecture reviews, or incident analysis.

中文简介正在准备中。当前显示英语简介。

  • Documenting authentication flows for security audits
  • Tracing branches while debugging system behavior
  • Reviewing how system components interact
zebbern/claude-code-guide46702026年10月20日 更新

Compare login approaches and authentication providers, then use implementation examples and security checklists to plan or review an app’s login flow. Covers sessions, tokens, external login providers, passkeys, and common implementation mistakes.

中文简介正在准备中。当前显示英语简介。

  • Choose a login approach for a new app
  • Compare NextAuth / Auth.js, Clerk, and Supabase Auth
  • Review token storage and refresh behavior
zebbern/claude-code-guide46702026年10月20日 更新

查看 zebbern 的全部技能

报告此技能的问题